Added tox integration to run unit tests for Omni project.
Description: 1. Fixed file paths in Nova, Neutron according to actual Openstack repository. 2. tox.ini: init file to run to tox command 3. run_tests.sh: actual script to run unit tests 4. omni-requirements.txt: Contains Python packages from Nova, Glance, Neutron and Cinder Usage: To run unit tests, execute 'tox -epy27' command in Omni project directory. Change-Id: Ife3a5d4c009198fb46faff7a21525dd739a87e9c
This commit is contained in:
parent
c955bc4a04
commit
699caafaa0
2
.gitignore
vendored
2
.gitignore
vendored
@ -2,3 +2,5 @@
|
||||
*~
|
||||
*venv
|
||||
.idea
|
||||
*.egg*
|
||||
.tox
|
||||
|
@ -1,262 +0,0 @@
|
||||
# Copyright 2011 VMware, Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""
|
||||
Routines for configuring Neutron
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
from keystoneclient import auth
|
||||
from keystoneclient import session as ks_session
|
||||
from oslo_config import cfg
|
||||
from oslo_db import options as db_options
|
||||
from oslo_log import log as logging
|
||||
import oslo_messaging
|
||||
from paste import deploy
|
||||
|
||||
from neutron.api.v2 import attributes
|
||||
from neutron.common import utils
|
||||
from neutron.i18n import _LI
|
||||
from neutron import policy
|
||||
from neutron import version
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
core_opts = [
|
||||
cfg.StrOpt('bind_host', default='0.0.0.0',
|
||||
help=_("The host IP to bind to")),
|
||||
cfg.IntOpt('bind_port', default=9696,
|
||||
help=_("The port to bind to")),
|
||||
cfg.StrOpt('api_paste_config', default="api-paste.ini",
|
||||
help=_("The API paste config file to use")),
|
||||
cfg.StrOpt('api_extensions_path', default="",
|
||||
help=_("The path for API extensions")),
|
||||
cfg.StrOpt('auth_strategy', default='keystone',
|
||||
help=_("The type of authentication to use")),
|
||||
cfg.StrOpt('core_plugin',
|
||||
help=_("The core plugin Neutron will use")),
|
||||
cfg.ListOpt('service_plugins', default=[],
|
||||
help=_("The service plugins Neutron will use")),
|
||||
cfg.StrOpt('base_mac', default="fa:16:3e:00:00:00",
|
||||
help=_("The base MAC address Neutron will use for VIFs")),
|
||||
cfg.IntOpt('mac_generation_retries', default=16,
|
||||
help=_("How many times Neutron will retry MAC generation")),
|
||||
cfg.BoolOpt('allow_bulk', default=True,
|
||||
help=_("Allow the usage of the bulk API")),
|
||||
cfg.BoolOpt('allow_pagination', default=False,
|
||||
help=_("Allow the usage of the pagination")),
|
||||
cfg.BoolOpt('allow_sorting', default=False,
|
||||
help=_("Allow the usage of the sorting")),
|
||||
cfg.StrOpt('pagination_max_limit', default="-1",
|
||||
help=_("The maximum number of items returned in a single "
|
||||
"response, value was 'infinite' or negative integer "
|
||||
"means no limit")),
|
||||
cfg.IntOpt('max_dns_nameservers', default=5,
|
||||
help=_("Maximum number of DNS nameservers")),
|
||||
cfg.IntOpt('max_subnet_host_routes', default=20,
|
||||
help=_("Maximum number of host routes per subnet")),
|
||||
cfg.IntOpt('max_fixed_ips_per_port', default=5,
|
||||
help=_("Maximum number of fixed ips per port")),
|
||||
cfg.StrOpt('default_ipv4_subnet_pool', default=None,
|
||||
help=_("Default IPv4 subnet-pool to be used for automatic "
|
||||
"subnet CIDR allocation")),
|
||||
cfg.StrOpt('default_ipv6_subnet_pool', default=None,
|
||||
help=_("Default IPv6 subnet-pool to be used for automatic "
|
||||
"subnet CIDR allocation")),
|
||||
cfg.IntOpt('dhcp_lease_duration', default=86400,
|
||||
deprecated_name='dhcp_lease_time',
|
||||
help=_("DHCP lease duration (in seconds). Use -1 to tell "
|
||||
"dnsmasq to use infinite lease times.")),
|
||||
cfg.StrOpt('dns_domain',
|
||||
default='openstacklocal',
|
||||
help=_('Domain to use for building the hostnames')),
|
||||
cfg.BoolOpt('dhcp_agent_notification', default=True,
|
||||
help=_("Allow sending resource operation"
|
||||
" notification to DHCP agent")),
|
||||
cfg.BoolOpt('allow_overlapping_ips', default=False,
|
||||
help=_("Allow overlapping IP support in Neutron")),
|
||||
cfg.StrOpt('host', default=utils.get_hostname(),
|
||||
help=_("Hostname to be used by the neutron server, agents and "
|
||||
"services running on this machine. All the agents and "
|
||||
"services running on this machine must use the same "
|
||||
"host value.")),
|
||||
cfg.BoolOpt('force_gateway_on_subnet', default=True,
|
||||
help=_("Ensure that configured gateway is on subnet. "
|
||||
"For IPv6, validate only if gateway is not a link "
|
||||
"local address. Deprecated, to be removed during the "
|
||||
"K release, at which point the check will be "
|
||||
"mandatory.")),
|
||||
cfg.BoolOpt('notify_nova_on_port_status_changes', default=True,
|
||||
help=_("Send notification to nova when port status changes")),
|
||||
cfg.BoolOpt('notify_nova_on_port_data_changes', default=True,
|
||||
help=_("Send notification to nova when port data (fixed_ips/"
|
||||
"floatingip) changes so nova can update its cache.")),
|
||||
cfg.StrOpt('nova_url',
|
||||
default='http://127.0.0.1:8774/v2',
|
||||
help=_('URL for connection to nova. '
|
||||
'Deprecated in favour of an auth plugin in [nova].')),
|
||||
cfg.StrOpt('nova_region_name',
|
||||
help=_('Region Name')),
|
||||
cfg.StrOpt('nova_admin_username',
|
||||
help=_('Username for connecting to nova in admin context. '
|
||||
'Deprecated in favour of an auth plugin in [nova].')),
|
||||
cfg.StrOpt('nova_admin_password',
|
||||
help=_('Password for connection to nova in admin context. '
|
||||
'Deprecated in favour of an auth plugin in [nova].'),
|
||||
secret=True),
|
||||
cfg.StrOpt('nova_admin_tenant_id',
|
||||
help=_('The uuid of the admin nova tenant. '
|
||||
'Deprecated in favour of an auth plugin in [nova].')),
|
||||
cfg.StrOpt('nova_admin_tenant_name',
|
||||
help=_('The name of the admin nova tenant. '
|
||||
'Deprecated in favour of an auth plugin in [nova].')),
|
||||
cfg.StrOpt('nova_admin_auth_url',
|
||||
default='http://localhost:5000/v2.0',
|
||||
help=_('Authorization URL for connecting to nova in admin '
|
||||
'context. '
|
||||
'Deprecated in favour of an auth plugin in [nova].')),
|
||||
cfg.IntOpt('send_events_interval', default=2,
|
||||
help=_('Number of seconds between sending events to nova if '
|
||||
'there are any events to send.')),
|
||||
cfg.BoolOpt('advertise_mtu', default=False,
|
||||
help=_('If True, effort is made to advertise MTU settings '
|
||||
'to VMs via network methods (DHCP and RA MTU options) '
|
||||
'when the network\'s preferred MTU is known.')),
|
||||
cfg.StrOpt('ipam_driver', default=None,
|
||||
help=_('IPAM driver to use.')),
|
||||
cfg.BoolOpt('vlan_transparent', default=False,
|
||||
help=_('If True, then allow plugins that support it to '
|
||||
'create VLAN transparent networks.')),
|
||||
]
|
||||
|
||||
core_cli_opts = [
|
||||
cfg.StrOpt('state_path',
|
||||
default='/var/lib/neutron',
|
||||
help=_("Where to store Neutron state files. "
|
||||
"This directory must be writable by the agent.")),
|
||||
]
|
||||
|
||||
# Register the configuration options
|
||||
cfg.CONF.register_opts(core_opts)
|
||||
cfg.CONF.register_cli_opts(core_cli_opts)
|
||||
|
||||
# Ensure that the control exchange is set correctly
|
||||
oslo_messaging.set_transport_defaults(control_exchange='neutron')
|
||||
|
||||
|
||||
def set_db_defaults():
|
||||
# Update the default QueuePool parameters. These can be tweaked by the
|
||||
# conf variables - max_pool_size, max_overflow and pool_timeout
|
||||
db_options.set_defaults(
|
||||
cfg.CONF,
|
||||
connection='sqlite://',
|
||||
sqlite_db='', max_pool_size=10,
|
||||
max_overflow=20, pool_timeout=10)
|
||||
|
||||
set_db_defaults()
|
||||
|
||||
NOVA_CONF_SECTION = 'nova'
|
||||
|
||||
nova_deprecated_opts = {
|
||||
'cafile': [cfg.DeprecatedOpt('nova_ca_certificates_file', 'DEFAULT')],
|
||||
'insecure': [cfg.DeprecatedOpt('nova_api_insecure', 'DEFAULT')],
|
||||
}
|
||||
ks_session.Session.register_conf_options(cfg.CONF, NOVA_CONF_SECTION,
|
||||
deprecated_opts=nova_deprecated_opts)
|
||||
auth.register_conf_options(cfg.CONF, NOVA_CONF_SECTION)
|
||||
|
||||
nova_opts = [
|
||||
cfg.StrOpt('region_name',
|
||||
deprecated_name='nova_region_name',
|
||||
deprecated_group='DEFAULT',
|
||||
help=_('Name of nova region to use. Useful if keystone manages'
|
||||
' more than one region.')),
|
||||
cfg.StrOpt('endpoint_type',
|
||||
default='public',
|
||||
choices=['public', 'admin', 'internal'],
|
||||
help=_('Type of the nova endpoint to use. This endpoint will'
|
||||
' be looked up in the keystone catalog and should be'
|
||||
' one of public, internal or admin.')),
|
||||
]
|
||||
cfg.CONF.register_opts(nova_opts, group=NOVA_CONF_SECTION)
|
||||
|
||||
logging.register_options(cfg.CONF)
|
||||
|
||||
|
||||
def init(args, **kwargs):
|
||||
cfg.CONF(args=args, project='neutron',
|
||||
version='%%(prog)s %s' % version.version_info.release_string(),
|
||||
**kwargs)
|
||||
|
||||
# FIXME(ihrachys): if import is put in global, circular import
|
||||
# failure occurs
|
||||
from neutron.common import rpc as n_rpc
|
||||
n_rpc.init(cfg.CONF)
|
||||
|
||||
# Validate that the base_mac is of the correct format
|
||||
msg = attributes._validate_regex(cfg.CONF.base_mac,
|
||||
attributes.MAC_PATTERN)
|
||||
if msg:
|
||||
msg = _("Base MAC: %s") % msg
|
||||
raise Exception(msg)
|
||||
|
||||
|
||||
def setup_logging():
|
||||
"""Sets up the logging options for a log with supplied name."""
|
||||
product_name = "neutron"
|
||||
logging.setup(cfg.CONF, product_name)
|
||||
LOG.info(_LI("Logging enabled!"))
|
||||
LOG.info(_LI("%(prog)s version %(version)s"),
|
||||
{'prog': sys.argv[0],
|
||||
'version': version.version_info.release_string()})
|
||||
LOG.debug("command line: %s", " ".join(sys.argv))
|
||||
|
||||
|
||||
def reset_service():
|
||||
# Reset worker in case SIGHUP is called.
|
||||
# Note that this is called only in case a service is running in
|
||||
# daemon mode.
|
||||
setup_logging()
|
||||
policy.refresh()
|
||||
|
||||
|
||||
def load_paste_app(app_name):
|
||||
"""Builds and returns a WSGI app from a paste config file.
|
||||
|
||||
:param app_name: Name of the application to load
|
||||
:raises ConfigFilesNotFoundError when config file cannot be located
|
||||
:raises RuntimeError when application cannot be loaded from config file
|
||||
"""
|
||||
|
||||
config_path = cfg.CONF.find_file(cfg.CONF.api_paste_config)
|
||||
if not config_path:
|
||||
raise cfg.ConfigFilesNotFoundError(
|
||||
config_files=[cfg.CONF.api_paste_config])
|
||||
config_path = os.path.abspath(config_path)
|
||||
LOG.info(_LI("Config paste file: %s"), config_path)
|
||||
|
||||
try:
|
||||
app = deploy.loadapp("config:%s" % config_path, name=app_name)
|
||||
except (LookupError, ImportError):
|
||||
msg = (_("Unable to load %(app_name)s from "
|
||||
"configuration file %(config_path)s.") %
|
||||
{'app_name': app_name,
|
||||
'config_path': config_path})
|
||||
LOG.exception(msg)
|
||||
raise RuntimeError(msg)
|
||||
return app
|
@ -1,104 +0,0 @@
|
||||
# The order of packages is significant, because pip processes them in the order
|
||||
# of appearance. Changing the order has an impact on the overall integration
|
||||
# process, which may cause wedges in the gate later.
|
||||
pbr==1.8.1
|
||||
|
||||
Paste==2.0.2
|
||||
PasteDeploy==1.5.2
|
||||
Routes==2.2;python_version=='2.7'
|
||||
Routes!=2.0,>=1.12.3;python_version!='2.7'
|
||||
debtcollector==1.3.0 # Apache-2.0
|
||||
eventlet==0.18.4
|
||||
pecan==1.0.4
|
||||
greenlet==0.4.9
|
||||
httplib2==0.9.2
|
||||
requests==2.9.1
|
||||
Jinja2==2.8 # BSD License (3 clause)
|
||||
keystonemiddleware==4.3.0
|
||||
netaddr==0.7.18
|
||||
python-neutronclient==4.0.0
|
||||
retrying==1.3.3 # Apache-2.0
|
||||
ryu==3.30 # Apache-2.0
|
||||
SQLAlchemy==1.0.12
|
||||
WebOb==1.5.1
|
||||
python-keystoneclient==2.2.0
|
||||
alembic==0.8.4
|
||||
six==1.10.0
|
||||
stevedore==1.11.0 # Apache-2.0
|
||||
oslo.vmware==2.1.0
|
||||
oslo.concurrency==2.6.1 # Apache-2.0
|
||||
oslo.config==3.7.0 # Apache-2.0
|
||||
oslo.context==2.0.0 # Apache-2.0
|
||||
oslo.db==4.5.0 # Apache-2.0
|
||||
oslo.i18n==3.3.0 # Apache-2.0
|
||||
oslo.log==3.0.0 # Apache-2.0
|
||||
oslo.messaging==4.3.0
|
||||
oslo.middleware==3.6.0
|
||||
oslo.policy==1.4.0 # Apache-2.0
|
||||
oslo.rootwrap==4.0.0 # Apache-2.0
|
||||
oslo.serialization==2.3.0 # Apache-2.0
|
||||
oslo.service==1.5.0 # Apache-2.0
|
||||
oslo.utils==3.6.0 # Apache-2.0
|
||||
oslo.versionedobjects==1.6.0
|
||||
|
||||
python-novaclient==3.2.0
|
||||
boto3==1.3.1
|
||||
|
||||
# Windows-only requirements
|
||||
pywin32;sys_platform=='win32'
|
||||
wmi;sys_platform=='win32'
|
||||
|
||||
## The following requirements were added by pip freeze:
|
||||
aioeventlet==0.5.1
|
||||
amqp==1.4.9
|
||||
anyjson==0.3.3
|
||||
appdirs==1.4.0
|
||||
Babel==2.2.0
|
||||
beautifulsoup4==4.4.1
|
||||
cachetools==1.1.5
|
||||
cliff==2.0.0
|
||||
cmd2==0.6.8
|
||||
contextlib2==0.5.1
|
||||
decorator==4.0.9
|
||||
enum34==1.1.2
|
||||
fasteners==0.14.1
|
||||
funcsigs==0.4
|
||||
futures==3.0.5
|
||||
futurist==0.13.0
|
||||
iso8601==0.1.11
|
||||
keystoneauth1==2.3.0
|
||||
kombu==3.0.35
|
||||
logutils==0.3.3
|
||||
Mako==1.0.4
|
||||
MarkupSafe==0.23
|
||||
monotonic==1.0
|
||||
msgpack-python==0.4.7
|
||||
MySQL-python==1.2.5
|
||||
netifaces==0.10.4
|
||||
os-client-config==1.16.0
|
||||
pika==0.10.0
|
||||
pika-pool==0.1.3
|
||||
positional==1.0.1
|
||||
prettytable==0.7.2
|
||||
pycadf==2.1.0
|
||||
pyinotify==0.9.6
|
||||
pyparsing==2.1.1
|
||||
python-dateutil==2.5.1
|
||||
python-editor==0.5
|
||||
pytz==2016.2
|
||||
PyYAML==3.11
|
||||
repoze.lru==0.6
|
||||
requestsexceptions==1.1.3
|
||||
simplejson==3.8.2
|
||||
singledispatch==3.4.0.3
|
||||
sqlalchemy-migrate==0.10.0
|
||||
sqlparse==0.1.19
|
||||
Tempita==0.5.2
|
||||
trollius==2.1
|
||||
unicodecsv==0.14.1
|
||||
waitress==0.8.10
|
||||
WebTest==2.0.20
|
||||
wrapt==1.10.6
|
||||
|
||||
# for ACI
|
||||
cryptography==1.1.2
|
@ -1,208 +0,0 @@
|
||||
[metadata]
|
||||
name = neutron
|
||||
summary = OpenStack Networking
|
||||
description-file =
|
||||
README.rst
|
||||
author = OpenStack
|
||||
author-email = openstack-dev@lists.openstack.org
|
||||
home-page = http://www.openstack.org/
|
||||
classifier =
|
||||
Environment :: OpenStack
|
||||
Intended Audience :: Information Technology
|
||||
Intended Audience :: System Administrators
|
||||
License :: OSI Approved :: Apache Software License
|
||||
Operating System :: POSIX :: Linux
|
||||
Programming Language :: Python
|
||||
Programming Language :: Python :: 2
|
||||
Programming Language :: Python :: 2.7
|
||||
|
||||
[files]
|
||||
packages =
|
||||
neutron
|
||||
data_files =
|
||||
etc/neutron =
|
||||
etc/api-paste.ini
|
||||
etc/dhcp_agent.ini
|
||||
etc/l3_agent.ini
|
||||
etc/metadata_agent.ini
|
||||
etc/metering_agent.ini
|
||||
etc/policy.json
|
||||
etc/neutron.conf
|
||||
etc/rootwrap.conf
|
||||
etc/neutron/rootwrap.d =
|
||||
etc/neutron/rootwrap.d/debug.filters
|
||||
etc/neutron/rootwrap.d/dhcp.filters
|
||||
etc/neutron/rootwrap.d/dibbler.filters
|
||||
etc/neutron/rootwrap.d/iptables-firewall.filters
|
||||
etc/neutron/rootwrap.d/ebtables.filters
|
||||
etc/neutron/rootwrap.d/ipset-firewall.filters
|
||||
etc/neutron/rootwrap.d/l3.filters
|
||||
etc/neutron/rootwrap.d/linuxbridge-plugin.filters
|
||||
etc/neutron/rootwrap.d/openvswitch-plugin.filters
|
||||
etc/init.d = etc/init.d/neutron-server
|
||||
etc/neutron/plugins/bigswitch =
|
||||
etc/neutron/plugins/bigswitch/restproxy.ini
|
||||
etc/neutron/plugins/bigswitch/ssl/ca_certs =
|
||||
etc/neutron/plugins/bigswitch/ssl/ca_certs/README
|
||||
etc/neutron/plugins/bigswitch/ssl/host_certs =
|
||||
etc/neutron/plugins/bigswitch/ssl/host_certs/README
|
||||
etc/neutron/plugins/brocade =
|
||||
etc/neutron/plugins/brocade/brocade.ini
|
||||
etc/neutron/plugins/brocade/brocade_mlx.ini
|
||||
etc/neutron/plugins/brocade/vyatta = etc/neutron/plugins/brocade/vyatta/vrouter.ini
|
||||
etc/neutron/plugins/cisco =
|
||||
etc/neutron/plugins/cisco/cisco_vpn_agent.ini
|
||||
etc/neutron/plugins/embrane = etc/neutron/plugins/embrane/heleos_conf.ini
|
||||
etc/neutron/plugins/ml2 =
|
||||
etc/neutron/plugins/bigswitch/restproxy.ini
|
||||
etc/neutron/plugins/ml2/linuxbridge_agent.ini
|
||||
etc/neutron/plugins/ml2/ml2_conf.ini
|
||||
etc/neutron/plugins/ml2/ml2_conf_brocade.ini
|
||||
etc/neutron/plugins/ml2/ml2_conf_brocade_fi_ni.ini
|
||||
etc/neutron/plugins/ml2/ml2_conf_ofa.ini
|
||||
etc/neutron/plugins/ml2/ml2_conf_fslsdn.ini
|
||||
etc/neutron/plugins/ml2/ml2_conf_sriov.ini
|
||||
etc/neutron/plugins/ml2/openvswitch_agent.ini
|
||||
etc/neutron/plugins/ml2/sriov_agent.ini
|
||||
etc/neutron/plugins/mlnx = etc/neutron/plugins/mlnx/mlnx_conf.ini
|
||||
etc/neutron/plugins/nuage = etc/neutron/plugins/nuage/nuage_plugin.ini
|
||||
etc/neutron/plugins/oneconvergence = etc/neutron/plugins/oneconvergence/nvsdplugin.ini
|
||||
etc/neutron/plugins/opencontrail = etc/neutron/plugins/opencontrail/contrailplugin.ini
|
||||
etc/neutron/plugins/ovsvapp = etc/neutron/plugins/ovsvapp/ovsvapp_agent.ini
|
||||
scripts =
|
||||
bin/neutron-rootwrap-xen-dom0
|
||||
|
||||
[entry_points]
|
||||
console_scripts =
|
||||
neutron-db-manage = neutron.db.migration.cli:main
|
||||
neutron-debug = neutron.debug.shell:main
|
||||
neutron-dhcp-agent = neutron.cmd.eventlet.agents.dhcp:main
|
||||
neutron-hyperv-agent = neutron.cmd.eventlet.plugins.hyperv_neutron_agent:main
|
||||
neutron-keepalived-state-change = neutron.cmd.keepalived_state_change:main
|
||||
neutron-ipset-cleanup = neutron.cmd.ipset_cleanup:main
|
||||
neutron-l3-agent = neutron.cmd.eventlet.agents.l3:main
|
||||
neutron-linuxbridge-agent = neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent:main
|
||||
neutron-metadata-agent = neutron.cmd.eventlet.agents.metadata:main
|
||||
neutron-mlnx-agent = neutron.cmd.eventlet.plugins.mlnx_neutron_agent:main
|
||||
neutron-netns-cleanup = neutron.cmd.netns_cleanup:main
|
||||
neutron-ns-metadata-proxy = neutron.cmd.eventlet.agents.metadata_proxy:main
|
||||
neutron-ovsvapp-agent = neutron.cmd.eventlet.plugins.ovsvapp_neutron_agent:main
|
||||
neutron-nvsd-agent = neutron.plugins.oneconvergence.agent.nvsd_neutron_agent:main
|
||||
neutron-openvswitch-agent = neutron.cmd.eventlet.plugins.ovs_neutron_agent:main
|
||||
neutron-ovs-cleanup = neutron.cmd.ovs_cleanup:main
|
||||
neutron-pd-notify = neutron.cmd.pd_notify:main
|
||||
neutron-restproxy-agent = neutron.plugins.bigswitch.agent.restproxy_agent:main
|
||||
neutron-server = neutron.cmd.eventlet.server:main_wsgi_eventlet
|
||||
neutron-dev-server = neutron.cmd.eventlet.server:main_wsgi_pecan
|
||||
neutron-rpc-server = neutron.cmd.eventlet.server:main_rpc_eventlet
|
||||
neutron-rootwrap = oslo_rootwrap.cmd:main
|
||||
neutron-rootwrap-daemon = oslo_rootwrap.cmd:daemon
|
||||
neutron-usage-audit = neutron.cmd.eventlet.usage_audit:main
|
||||
neutron-metering-agent = neutron.cmd.eventlet.services.metering_agent:main
|
||||
neutron-sriov-nic-agent = neutron.plugins.ml2.drivers.mech_sriov.agent.sriov_nic_agent:main
|
||||
neutron-sanity-check = neutron.cmd.sanity_check:main
|
||||
neutron.core_plugins =
|
||||
bigswitch = neutron.plugins.bigswitch.plugin:NeutronRestProxyV2
|
||||
brocade = neutron.plugins.brocade.NeutronPlugin:BrocadePluginV2
|
||||
embrane = neutron.plugins.embrane.plugins.embrane_ml2_plugin:EmbraneMl2Plugin
|
||||
ml2 = neutron.plugins.ml2.plugin:Ml2Plugin
|
||||
nuage = neutron.plugins.nuage.plugin:NuagePlugin
|
||||
oneconvergence = neutron.plugins.oneconvergence.plugin:OneConvergencePluginV2
|
||||
neutron.service_plugins =
|
||||
dummy = neutron.tests.unit.dummy_plugin:DummyServicePlugin
|
||||
router = neutron.services.l3_router.l3_router_plugin:L3RouterPlugin
|
||||
bigswitch_l3 = neutron.plugins.bigswitch.l3_router_plugin:L3RestProxy
|
||||
brocade_vyatta_l3 = neutron.services.l3_router.brocade.vyatta.vrouter_neutron_plugin:VyattaVRouterPlugin
|
||||
brocade_mlx_l3 = neutron.services.l3_router.brocade.mlx.l3_router_plugin:BrocadeRouterPlugin
|
||||
firewall = neutron_fwaas.services.firewall.fwaas_plugin:FirewallPlugin
|
||||
fsl_firewall = neutron_fwaas.services.firewall.freescale.fwaas_plugin:FirewallPlugin
|
||||
lbaas = neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPlugin
|
||||
vpnaas = neutron_vpnaas.services.vpn.plugin:VPNDriverPlugin
|
||||
metering = neutron.services.metering.metering_plugin:MeteringPlugin
|
||||
neutron.services.firewall.fwaas_plugin.FirewallPlugin = neutron_fwaas.services.firewall.fwaas_plugin:FirewallPlugin
|
||||
neutron.services.loadbalancer.plugin.LoadBalancerPlugin = neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPlugin
|
||||
neutron.services.vpn.plugin.VPNDriverPlugin = neutron_vpnaas.services.vpn.plugin:VPNDriverPlugin
|
||||
ibm_l3 = neutron.services.l3_router.l3_sdnve:SdnveL3ServicePlugin
|
||||
qos = neutron.services.qos.qos_plugin:QoSPlugin
|
||||
# PF9 start
|
||||
aws_router = neutron.services.l3_router.aws_router_plugin:AwsRouterPlugin
|
||||
# PF9 end
|
||||
neutron.qos.notification_drivers =
|
||||
message_queue = neutron.services.qos.notification_drivers.message_queue:RpcQosServiceNotificationDriver
|
||||
neutron.ml2.type_drivers =
|
||||
flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver
|
||||
local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver
|
||||
vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver
|
||||
geneve = neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver
|
||||
gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver
|
||||
vxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver
|
||||
opflex = opflexagent.type_opflex:OpflexTypeDriver
|
||||
neutron.ml2.mechanism_drivers =
|
||||
ovsvapp = neutron.plugins.ml2.drivers.ovsvapp.mech_driver:OVSvAppAgentMechanismDriver
|
||||
opendaylight = neutron.plugins.ml2.drivers.opendaylight.driver:OpenDaylightMechanismDriver
|
||||
logger = neutron.tests.unit.plugins.ml2.drivers.mechanism_logger:LoggerMechanismDriver
|
||||
test = neutron.tests.unit.plugins.ml2.drivers.mechanism_test:TestMechanismDriver
|
||||
linuxbridge = neutron.plugins.ml2.drivers.linuxbridge.mech_driver.mech_linuxbridge:LinuxbridgeMechanismDriver
|
||||
openvswitch = neutron.plugins.ml2.drivers.openvswitch.mech_driver.mech_openvswitch:OpenvswitchMechanismDriver
|
||||
hyperv = neutron.plugins.ml2.drivers.hyperv.mech_hyperv:HypervMechanismDriver
|
||||
l2population = neutron.plugins.ml2.drivers.l2pop.mech_driver:L2populationMechanismDriver
|
||||
ofagent = neutron.plugins.ml2.drivers.ofagent.driver:OfagentMechanismDriver
|
||||
mlnx = neutron.plugins.ml2.drivers.mlnx.mech_mlnx:MlnxMechanismDriver
|
||||
brocade = networking_brocade.vdx.ml2driver.mechanism_brocade:BrocadeMechanism
|
||||
brocade_fi_ni = neutron.plugins.ml2.drivers.brocade.fi_ni.mechanism_brocade_fi_ni:BrocadeFiNiMechanism
|
||||
fslsdn = neutron.plugins.ml2.drivers.freescale.mechanism_fslsdn:FslsdnMechanismDriver
|
||||
sriovnicswitch = neutron.plugins.ml2.drivers.mech_sriov.mech_driver.mech_driver:SriovNicSwitchMechanismDriver
|
||||
fake_agent = neutron.tests.unit.plugins.ml2.drivers.mech_fake_agent:FakeAgentMechanismDriver
|
||||
sdnve = neutron.plugins.ml2.drivers.ibm.mechanism_sdnve:SdnveMechanismDriver
|
||||
aws = neutron.plugins.ml2.drivers.aws.mechanism_aws:AwsMechanismDriver
|
||||
neutron.ml2.extension_drivers =
|
||||
test = neutron.tests.unit.plugins.ml2.drivers.ext_test:TestExtensionDriver
|
||||
testdb = neutron.tests.unit.plugins.ml2.drivers.ext_test:TestDBExtensionDriver
|
||||
port_security = neutron.plugins.ml2.extensions.port_security:PortSecurityExtensionDriver
|
||||
qos = neutron.plugins.ml2.extensions.qos:QosExtensionDriver
|
||||
neutron.openstack.common.cache.backends =
|
||||
memory = neutron.openstack.common.cache._backends.memory:MemoryBackend
|
||||
neutron.ipam_drivers =
|
||||
fake = neutron.tests.unit.ipam.fake_driver:FakeDriver
|
||||
internal = neutron.ipam.drivers.neutrondb_ipam.driver:NeutronDbPool
|
||||
neutron.agent.l2.extensions =
|
||||
qos = neutron.agent.l2.extensions.qos:QosAgentExtension
|
||||
neutron.qos.agent_drivers =
|
||||
ovs = neutron.plugins.ml2.drivers.openvswitch.agent.extension_drivers.qos_driver:QosOVSAgentDriver
|
||||
sriov = neutron.plugins.ml2.drivers.mech_sriov.agent.extension_drivers.qos_driver:QosSRIOVAgentDriver
|
||||
neutron.agent.linux.pd_drivers =
|
||||
dibbler = neutron.agent.linux.dibbler:PDDibbler
|
||||
# These are for backwards compat with Icehouse notification_driver configuration values
|
||||
oslo.messaging.notify.drivers =
|
||||
neutron.openstack.common.notifier.log_notifier = oslo_messaging.notify._impl_log:LogDriver
|
||||
neutron.openstack.common.notifier.no_op_notifier = oslo_messaging.notify._impl_noop:NoOpDriver
|
||||
neutron.openstack.common.notifier.rpc_notifier2 = oslo_messaging.notify._impl_messaging:MessagingV2Driver
|
||||
neutron.openstack.common.notifier.rpc_notifier = oslo_messaging.notify._impl_messaging:MessagingDriver
|
||||
neutron.openstack.common.notifier.test_notifier = oslo_messaging.notify._impl_test:TestDriver
|
||||
neutron.db.alembic_migrations =
|
||||
neutron = neutron.db.migration:alembic_migrations
|
||||
|
||||
[build_sphinx]
|
||||
all_files = 1
|
||||
build-dir = doc/build
|
||||
source-dir = doc/source
|
||||
|
||||
[extract_messages]
|
||||
keywords = _ gettext ngettext l_ lazy_gettext
|
||||
mapping_file = babel.cfg
|
||||
output_file = neutron/locale/neutron.pot
|
||||
|
||||
[compile_catalog]
|
||||
directory = neutron/locale
|
||||
domain = neutron
|
||||
|
||||
[update_catalog]
|
||||
domain = neutron
|
||||
output_dir = neutron/locale
|
||||
input_file = neutron/locale/neutron.pot
|
||||
|
||||
[wheel]
|
||||
universal = 1
|
||||
|
||||
[pbr]
|
||||
warnerrors = true
|
@ -70,7 +70,7 @@ aws_opts = [
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.import_opt('my_ip', 'nova.netconf')
|
||||
#CONF.import_opt('my_ip', 'nova.netconf')
|
||||
|
||||
CONF.register_group(aws_group)
|
||||
CONF.register_opts(aws_opts, group=aws_group)
|
5
omni-requirements.txt
Normal file
5
omni-requirements.txt
Normal file
@ -0,0 +1,5 @@
|
||||
google-api-python-client>=1.4.2 # Apache-2.0
|
||||
moto
|
||||
boto>=2.32.1 # MIT
|
||||
ipaddr
|
||||
google_compute_engine
|
133
run_tests.sh
Normal file
133
run_tests.sh
Normal file
@ -0,0 +1,133 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2017 Platform9 Systems Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either expressed or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
key="$1"
|
||||
|
||||
case $key in
|
||||
-j) JENKINSRUN=true;;
|
||||
-wj) JENKINSRUN=false;;
|
||||
esac
|
||||
|
||||
if [ -d "$DIRECTORY" ]; then
|
||||
rm -rf $DIRECTORY
|
||||
fi
|
||||
|
||||
if [ "$JENKINSRUN" = true ]; then
|
||||
export OMNI_DIR="$BASE/new/omni"
|
||||
sudo chown -R jenkins:stack $OMNI_DIR
|
||||
cd $OMNI_DIR
|
||||
fi
|
||||
|
||||
WORKSPACE=$(pwd)
|
||||
DIRECTORY="$WORKSPACE/omnitests"
|
||||
GCE_TEST="test_gce"
|
||||
AWS_TEST="test_ec2"
|
||||
declare -A results
|
||||
declare -i fail
|
||||
declare -i pass
|
||||
|
||||
mkdir $DIRECTORY
|
||||
|
||||
clone_repos() {
|
||||
project=$1
|
||||
git clone -b stable/newton --depth 1 https://github.com/openstack/$project.git $DIRECTORY/$project
|
||||
}
|
||||
|
||||
copy_cinder_files() {
|
||||
cp -R $WORKSPACE/cinder/tests/unit/volume/drivers/ $DIRECTORY/cinder/cinder/tests/unit/volume/
|
||||
cp -R $WORKSPACE/cinder/volume/drivers/ $DIRECTORY/cinder/cinder/volume/
|
||||
}
|
||||
|
||||
copy_glance_files() {
|
||||
cp -R $WORKSPACE/glance/glance_store/tests/unit/ $DIRECTORY/glance_store/glance_store/tests
|
||||
cp $WORKSPACE/glance/gce/gceutils.py $DIRECTORY/glance_store/glance_store/_drivers/
|
||||
cp -R $WORKSPACE/glance/glance_store/_drivers/ $DIRECTORY/glance_store/glance_store/
|
||||
}
|
||||
|
||||
copy_nova_files() {
|
||||
cp -R $WORKSPACE/nova/virt/ $DIRECTORY/nova/nova/
|
||||
cp -R $WORKSPACE/nova/tests/unit/virt $DIRECTORY/nova/nova/tests/unit
|
||||
}
|
||||
|
||||
copy_neutron_files() {
|
||||
cp -R $WORKSPACE/neutron/neutron/common/ $DIRECTORY/neutron/neutron/
|
||||
cp -R $WORKSPACE/neutron/neutron/plugins/ml2/drivers/ $DIRECTORY/neutron/neutron/plugins/ml2/
|
||||
cp $WORKSPACE/neutron/neutron/services/l3_router/* $DIRECTORY/neutron/neutron/services/l3_router/
|
||||
cp -R $WORKSPACE/neutron/tests/common/ $DIRECTORY/neutron/neutron/tests/
|
||||
cp -R $WORKSPACE/neutron/tests/plugins/ml2/drivers/ $DIRECTORY/neutron/neutron/tests/unit/plugins/ml2/
|
||||
}
|
||||
|
||||
run_tests() {
|
||||
project=$1
|
||||
tests=$2
|
||||
cd $DIRECTORY/$project
|
||||
cat $WORKSPACE/omni-requirements.txt >> requirements.txt
|
||||
tox -epy27 $tests > $DIRECTORY/$project.log
|
||||
}
|
||||
|
||||
check_results() {
|
||||
project=$1
|
||||
fail=$(awk '/Failed: /{print}' $DIRECTORY/$project.log | awk -F ': ' '{print $2}')
|
||||
pass=$(awk '/Passed: /{print}' $DIRECTORY/$project.log | awk -F ': ' '{print $2}')
|
||||
if [[ $fail -gt 0 ]]; then
|
||||
results+=( ["$project"]="FAILED" )
|
||||
elif [[ $pass -gt 0 ]]; then
|
||||
results+=( ["$project"]="PASSED" )
|
||||
else
|
||||
# When tests failed due to import errors, we don't get number of failed
|
||||
# or passed tests. In this case, we are assigning UNKNOWN state to tests
|
||||
results+=( ["$project"]="UNKNOWN" )
|
||||
fi
|
||||
}
|
||||
|
||||
echo "============Cloning repos============"
|
||||
clone_repos cinder &
|
||||
clone_repos nova &
|
||||
clone_repos glance_store &
|
||||
clone_repos neutron &
|
||||
wait
|
||||
|
||||
copy_cinder_files
|
||||
copy_nova_files
|
||||
copy_glance_files
|
||||
copy_neutron_files
|
||||
|
||||
echo "============Running tests============"
|
||||
run_tests cinder "$GCE_TEST $AWS_TEST" &
|
||||
run_tests nova "$GCE_TEST $AWS_TEST" &
|
||||
run_tests glance_store "$GCE_TEST" &
|
||||
run_tests neutron "$GCE_TEST" &
|
||||
wait
|
||||
|
||||
check_results cinder
|
||||
check_results nova
|
||||
check_results glance_store
|
||||
check_results neutron
|
||||
|
||||
echo "==========================================================================================="
|
||||
echo "Log files are in $DIRECTORY/. Please check log files for UNKNOWN status."
|
||||
echo "Cinder results: ${results[cinder]}"
|
||||
echo "Nova results: ${results[nova]}"
|
||||
echo "Glance results: ${results[glance_store]}"
|
||||
echo "Neutron results: ${results[neutron]}"
|
||||
echo "==========================================================================================="
|
||||
|
||||
if [ "${results[cinder]}" = "FAILED" ] || \
|
||||
[ "${results[nova]}" = "FAILED" ] || \
|
||||
[ "${results[glance_store]}" = "FAILED" ] || \
|
||||
[ "${results[neutron]}" = "FAILED" ]; then
|
||||
echo "Test cases failed"
|
||||
exit 1
|
||||
fi
|
11
setup.cfg
Normal file
11
setup.cfg
Normal file
@ -0,0 +1,11 @@
|
||||
[metadata]
|
||||
name = omni
|
||||
summary = Omni Project
|
||||
description-file = README.md
|
||||
classifier =
|
||||
Environment :: OpenStack
|
||||
License :: OSI Approved :: Apache Software License
|
||||
Operating System :: POSIX :: Linux
|
||||
Programming Language :: Python
|
||||
Programming Language :: Python :: 2
|
||||
Programming Language :: Python :: 2.7
|
19
setup.py
Normal file
19
setup.py
Normal file
@ -0,0 +1,19 @@
|
||||
# Copyright (c) 2017 Platform9 Systems Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either expressed or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import setuptools
|
||||
|
||||
setuptools.setup(
|
||||
setup_requires=['pbr>=1.8'],
|
||||
pbr=True)
|
Loading…
Reference in New Issue
Block a user