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
|
*venv
|
||||||
.idea
|
.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 = cfg.CONF
|
||||||
CONF.import_opt('my_ip', 'nova.netconf')
|
#CONF.import_opt('my_ip', 'nova.netconf')
|
||||||
|
|
||||||
CONF.register_group(aws_group)
|
CONF.register_group(aws_group)
|
||||||
CONF.register_opts(aws_opts, 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