For queens sync
Change-Id: I381411ad2285257b49bd78ae22c734cea07315c9
This commit is contained in:
parent
6fde26184b
commit
c215f71376
|
@ -0,0 +1,3 @@
|
||||||
|
[DEFAULT]
|
||||||
|
test_path=${OS_TEST_PATH:-./gbpservice/neutron/tests/unit}
|
||||||
|
top_dir=./
|
|
@ -5,7 +5,7 @@ function prepare_nsx_policy {
|
||||||
NSXLIB_NAME='vmware-nsxlib'
|
NSXLIB_NAME='vmware-nsxlib'
|
||||||
GITDIR[$NSXLIB_NAME]=/opt/stack/vmware-nsxlib
|
GITDIR[$NSXLIB_NAME]=/opt/stack/vmware-nsxlib
|
||||||
GITREPO[$NSXLIB_NAME]=${NSXLIB_REPO:-${GIT_BASE}/openstack/vmware-nsxlib.git}
|
GITREPO[$NSXLIB_NAME]=${NSXLIB_REPO:-${GIT_BASE}/openstack/vmware-nsxlib.git}
|
||||||
GITBRANCH[$NSXLIB_NAME]=${NSXLIB_BRANCH:-stable/pike}
|
GITBRANCH[$NSXLIB_NAME]=${NSXLIB_BRANCH:-stable/queens}
|
||||||
|
|
||||||
if use_library_from_git $NSXLIB_NAME; then
|
if use_library_from_git $NSXLIB_NAME; then
|
||||||
git_clone_by_name $NSXLIB_NAME
|
git_clone_by_name $NSXLIB_NAME
|
||||||
|
|
|
@ -43,10 +43,10 @@ if [[ $ENABLE_NFP = True ]]; then
|
||||||
# Make sure that your public interface is not attached to any bridge.
|
# Make sure that your public interface is not attached to any bridge.
|
||||||
PUBLIC_INTERFACE=
|
PUBLIC_INTERFACE=
|
||||||
|
|
||||||
enable_plugin neutron-fwaas http://git.openstack.org/openstack/neutron-fwaas stable/pike
|
enable_plugin neutron-fwaas http://git.openstack.org/openstack/neutron-fwaas stable/queens
|
||||||
enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas stable/pike
|
enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas stable/queens
|
||||||
enable_plugin neutron https://github.com/openstack/neutron.git stable/pike
|
enable_plugin neutron https://github.com/openstack/neutron.git stable/queens
|
||||||
enable_plugin neutron-vpnaas https://git.openstack.org/openstack/neutron-vpnaas stable/pike
|
enable_plugin neutron-vpnaas https://git.openstack.org/openstack/neutron-vpnaas stable/queens
|
||||||
enable_plugin octavia https://git.openstack.org/openstack/octavia
|
enable_plugin octavia https://git.openstack.org/openstack/octavia
|
||||||
#enable_plugin barbican https://git.openstack.org/openstack/barbican master
|
#enable_plugin barbican https://git.openstack.org/openstack/barbican master
|
||||||
#enable_plugin ceilometer https://git.openstack.org/openstack/ceilometer.git master
|
#enable_plugin ceilometer https://git.openstack.org/openstack/ceilometer.git master
|
||||||
|
|
|
@ -23,10 +23,10 @@ from neutron.db.l3_db import DEVICE_OWNER_ROUTER_INTF
|
||||||
from neutron.db.l3_db import EXTERNAL_GW_INFO
|
from neutron.db.l3_db import EXTERNAL_GW_INFO
|
||||||
from neutron.db.models.l3 import RouterPort
|
from neutron.db.models.l3 import RouterPort
|
||||||
from neutron.db import models_v2
|
from neutron.db import models_v2
|
||||||
from neutron.extensions import l3
|
|
||||||
from neutron.plugins.common import constants as n_const
|
|
||||||
from neutron_lib import constants as nlib_const
|
from neutron_lib import constants as nlib_const
|
||||||
from neutron_lib import exceptions as n_exc
|
from neutron_lib import exceptions as n_exc
|
||||||
|
from neutron_lib.exceptions import l3
|
||||||
|
from neutron_lib.plugins import constants as n_const
|
||||||
|
|
||||||
import neutron_fwaas.extensions
|
import neutron_fwaas.extensions
|
||||||
from neutron_fwaas.services.firewall import fwaas_plugin as ref_fw_plugin
|
from neutron_fwaas.services.firewall import fwaas_plugin as ref_fw_plugin
|
||||||
|
|
|
@ -11,15 +11,15 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from neutron.extensions import address_scope
|
|
||||||
from neutron.extensions import l3
|
|
||||||
from neutron.extensions import securitygroup as ext_sg
|
from neutron.extensions import securitygroup as ext_sg
|
||||||
from neutron.notifiers import nova
|
from neutron.notifiers import nova
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron import quota
|
from neutron import quota
|
||||||
from neutron_lib.callbacks import registry
|
from neutron_lib.callbacks import registry
|
||||||
from neutron_lib import constants as nl_const
|
from neutron_lib import constants as nl_const
|
||||||
from neutron_lib import exceptions as n_exc
|
from neutron_lib import exceptions as n_exc
|
||||||
|
from neutron_lib.exceptions import address_scope as api_err
|
||||||
|
from neutron_lib.exceptions import l3
|
||||||
|
from neutron_lib.plugins import constants as pconst
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
from oslo_utils import excutils
|
from oslo_utils import excutils
|
||||||
|
@ -578,7 +578,7 @@ class LocalAPI(object):
|
||||||
try:
|
try:
|
||||||
self._delete_resource(self._core_plugin, plugin_context,
|
self._delete_resource(self._core_plugin, plugin_context,
|
||||||
'address_scope', address_scope_id)
|
'address_scope', address_scope_id)
|
||||||
except address_scope.AddressScopeNotFound:
|
except api_err.AddressScopeNotFound:
|
||||||
LOG.warning('Address Scope %s already deleted',
|
LOG.warning('Address Scope %s already deleted',
|
||||||
address_scope_id)
|
address_scope_id)
|
||||||
|
|
||||||
|
|
|
@ -14,9 +14,9 @@ import ast
|
||||||
|
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.db import common_db_mixin
|
from neutron.db import common_db_mixin
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron_lib.db import model_base
|
from neutron_lib.db import model_base
|
||||||
from neutron_lib import exceptions as n_exc
|
from neutron_lib import exceptions as n_exc
|
||||||
|
from neutron_lib.plugins import constants as pconst
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_log import helpers as log
|
from oslo_log import helpers as log
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from neutron.extensions import l3
|
|
||||||
from neutron_lib.api import converters
|
from neutron_lib.api import converters
|
||||||
|
from neutron_lib.api.definitions import l3
|
||||||
from neutron_lib.api import extensions
|
from neutron_lib.api import extensions
|
||||||
|
|
||||||
from gbpservice.neutron.extensions import cisco_apic
|
from gbpservice.neutron.extensions import cisco_apic
|
||||||
|
|
|
@ -16,12 +16,12 @@ import re
|
||||||
from neutron.api import extensions as neutron_extensions
|
from neutron.api import extensions as neutron_extensions
|
||||||
from neutron.api.v2 import attributes as attr
|
from neutron.api.v2 import attributes as attr
|
||||||
from neutron.api.v2 import resource_helper
|
from neutron.api.v2 import resource_helper
|
||||||
from neutron.plugins.common import constants
|
|
||||||
from neutron_lib.api import converters as conv
|
from neutron_lib.api import converters as conv
|
||||||
from neutron_lib.api import extensions
|
from neutron_lib.api import extensions
|
||||||
from neutron_lib.api import validators as valid
|
from neutron_lib.api import validators as valid
|
||||||
from neutron_lib import constants as nlib_const
|
from neutron_lib import constants as nlib_const
|
||||||
from neutron_lib import exceptions as nexc
|
from neutron_lib import exceptions as nexc
|
||||||
|
from neutron_lib.plugins import constants
|
||||||
from neutron_lib.services import base as service_base
|
from neutron_lib.services import base as service_base
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
|
@ -10,17 +10,19 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from neutron.api import extensions
|
||||||
from neutron.db import address_scope_db
|
from neutron.db import address_scope_db
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.db import common_db_mixin
|
from neutron.db import common_db_mixin
|
||||||
from neutron.db import l3_db
|
from neutron.db import l3_db
|
||||||
from neutron.db import models_v2
|
from neutron.db import models_v2
|
||||||
from neutron.db import securitygroups_db
|
from neutron.db import securitygroups_db
|
||||||
from neutron.extensions import address_scope as ext_address_scope
|
|
||||||
from neutron.objects import subnetpool as subnetpool_obj
|
from neutron.objects import subnetpool as subnetpool_obj
|
||||||
from neutron.plugins.ml2 import db as ml2_db
|
from neutron.plugins.ml2 import db as ml2_db
|
||||||
|
from neutron_lib.api import attributes
|
||||||
from neutron_lib.api import validators
|
from neutron_lib.api import validators
|
||||||
from neutron_lib import exceptions as n_exc
|
from neutron_lib import exceptions
|
||||||
|
from neutron_lib.exceptions import address_scope as api_err
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
from oslo_utils import excutils
|
from oslo_utils import excutils
|
||||||
from sqlalchemy import event
|
from sqlalchemy import event
|
||||||
|
@ -185,7 +187,7 @@ def _get_tenant_id_for_create(self, context, resource):
|
||||||
elif ('tenant_id' in resource and
|
elif ('tenant_id' in resource and
|
||||||
resource['tenant_id'] != context.project_id):
|
resource['tenant_id'] != context.project_id):
|
||||||
reason = _('Cannot create resource for another tenant')
|
reason = _('Cannot create resource for another tenant')
|
||||||
raise n_exc.AdminRequired(reason=reason)
|
raise exceptions.AdminRequired(reason=reason)
|
||||||
else:
|
else:
|
||||||
tenant_id = context.project_id
|
tenant_id = context.project_id
|
||||||
|
|
||||||
|
@ -207,13 +209,137 @@ def _delete_address_scope(self, context, id):
|
||||||
with context.session.begin(subtransactions=True):
|
with context.session.begin(subtransactions=True):
|
||||||
if subnetpool_obj.SubnetPool.get_objects(context,
|
if subnetpool_obj.SubnetPool.get_objects(context,
|
||||||
address_scope_id=id):
|
address_scope_id=id):
|
||||||
raise ext_address_scope.AddressScopeInUse(address_scope_id=id)
|
raise api_err.AddressScopeInUse(address_scope_id=id)
|
||||||
address_scope = self._get_address_scope(context, id)
|
address_scope = self._get_address_scope(context, id)
|
||||||
address_scope.delete()
|
address_scope.delete()
|
||||||
|
|
||||||
address_scope_db.AddressScopeDbMixin.delete_address_scope = (
|
address_scope_db.AddressScopeDbMixin.delete_address_scope = (
|
||||||
_delete_address_scope)
|
_delete_address_scope)
|
||||||
|
|
||||||
|
|
||||||
|
def extend_resources(self, version, attr_map):
|
||||||
|
"""Extend resources with additional resources or attributes.
|
||||||
|
|
||||||
|
:param attr_map: the existing mapping from resource name to
|
||||||
|
attrs definition.
|
||||||
|
|
||||||
|
After this function, we will extend the attr_map if an extension
|
||||||
|
wants to extend this map.
|
||||||
|
"""
|
||||||
|
processed_exts = {}
|
||||||
|
exts_to_process = self.extensions.copy()
|
||||||
|
check_optionals = True
|
||||||
|
# Iterate until there are unprocessed extensions or if no progress
|
||||||
|
# is made in a whole iteration
|
||||||
|
while exts_to_process:
|
||||||
|
processed_ext_count = len(processed_exts)
|
||||||
|
for ext_name, ext in list(exts_to_process.items()):
|
||||||
|
# Process extension only if all required extensions
|
||||||
|
# have been processed already
|
||||||
|
required_exts_set = set(ext.get_required_extensions())
|
||||||
|
if required_exts_set - set(processed_exts):
|
||||||
|
continue
|
||||||
|
optional_exts_set = set(ext.get_optional_extensions())
|
||||||
|
if check_optionals and optional_exts_set - set(processed_exts):
|
||||||
|
continue
|
||||||
|
extended_attrs = ext.get_extended_resources(version)
|
||||||
|
for res, resource_attrs in extended_attrs.items():
|
||||||
|
res_to_update = attr_map.setdefault(res, {})
|
||||||
|
if self._is_sub_resource(res_to_update):
|
||||||
|
# kentwu: service_profiles defined in servicechain
|
||||||
|
# plugin has a name conflict with service_profiles
|
||||||
|
# sub-resource defined in flavor plugin. The attr_map
|
||||||
|
# can only have one service_profiles so here we make
|
||||||
|
# this very same service_profiles to have the
|
||||||
|
# attributes from both plugins. This behavior is now
|
||||||
|
# consistent with Pike.
|
||||||
|
if (ext_name == 'servicechain' and
|
||||||
|
res == 'service_profiles'):
|
||||||
|
res_to_update.update(resource_attrs)
|
||||||
|
# in the case of an existing sub-resource, we need to
|
||||||
|
# update the parameters content rather than overwrite
|
||||||
|
# it, and also keep the description of the parent
|
||||||
|
# resource unmodified
|
||||||
|
else:
|
||||||
|
res_to_update['parameters'].update(
|
||||||
|
resource_attrs['parameters'])
|
||||||
|
else:
|
||||||
|
res_to_update.update(resource_attrs)
|
||||||
|
processed_exts[ext_name] = ext
|
||||||
|
del exts_to_process[ext_name]
|
||||||
|
if len(processed_exts) == processed_ext_count:
|
||||||
|
# if we hit here, it means there are unsatisfied
|
||||||
|
# dependencies. try again without optionals since optionals
|
||||||
|
# are only necessary to set order if they are present.
|
||||||
|
if check_optionals:
|
||||||
|
check_optionals = False
|
||||||
|
continue
|
||||||
|
# Exit loop as no progress was made
|
||||||
|
break
|
||||||
|
if exts_to_process:
|
||||||
|
unloadable_extensions = set(exts_to_process.keys())
|
||||||
|
LOG.error("Unable to process extensions (%s) because "
|
||||||
|
"the configured plugins do not satisfy "
|
||||||
|
"their requirements. Some features will not "
|
||||||
|
"work as expected.",
|
||||||
|
', '.join(unloadable_extensions))
|
||||||
|
self._check_faulty_extensions(unloadable_extensions)
|
||||||
|
# Extending extensions' attributes map.
|
||||||
|
for ext in processed_exts.values():
|
||||||
|
ext.update_attributes_map(attr_map)
|
||||||
|
|
||||||
|
extensions.ExtensionManager.extend_resources = extend_resources
|
||||||
|
|
||||||
|
|
||||||
|
def fill_post_defaults(
|
||||||
|
self, res_dict,
|
||||||
|
exc_cls=lambda m: exceptions.InvalidInput(error_message=m),
|
||||||
|
check_allow_post=True):
|
||||||
|
"""Fill in default values for attributes in a POST request.
|
||||||
|
|
||||||
|
When a POST request is made, the attributes with default values do not
|
||||||
|
need to be specified by the user. This function fills in the values of
|
||||||
|
any unspecified attributes if they have a default value.
|
||||||
|
|
||||||
|
If an attribute is not specified and it does not have a default value,
|
||||||
|
an exception is raised.
|
||||||
|
|
||||||
|
If an attribute is specified and it is not allowed in POST requests, an
|
||||||
|
exception is raised. The caller can override this behavior by setting
|
||||||
|
check_allow_post=False (used by some internal admin operations).
|
||||||
|
|
||||||
|
:param res_dict: The resource attributes from the request.
|
||||||
|
:param exc_cls: Exception to be raised on error that must take
|
||||||
|
a single error message as it's only constructor arg.
|
||||||
|
:param check_allow_post: Raises an exception if a non-POST-able
|
||||||
|
attribute is specified.
|
||||||
|
:raises: exc_cls If check_allow_post is True and this instance of
|
||||||
|
ResourceAttributes doesn't support POST.
|
||||||
|
"""
|
||||||
|
for attr, attr_vals in self.attributes.items():
|
||||||
|
# kentwu: Patch needed for our GBP service_profiles attribute. Since
|
||||||
|
# parent and parameters are both sub-resource's attributes picked up
|
||||||
|
# from flavor plugin so we can just ignore those. These 2 attributes
|
||||||
|
# don't have allow_post defined so it will just fail without this
|
||||||
|
# patch.
|
||||||
|
if attr == 'parent' or attr == 'parameters':
|
||||||
|
if 'allow_post' not in attr_vals:
|
||||||
|
continue
|
||||||
|
if attr_vals['allow_post']:
|
||||||
|
if 'default' not in attr_vals and attr not in res_dict:
|
||||||
|
msg = _("Failed to parse request. Required "
|
||||||
|
"attribute '%s' not specified") % attr
|
||||||
|
raise exc_cls(msg)
|
||||||
|
res_dict[attr] = res_dict.get(attr,
|
||||||
|
attr_vals.get('default'))
|
||||||
|
elif check_allow_post:
|
||||||
|
if attr in res_dict:
|
||||||
|
msg = _("Attribute '%s' not allowed in POST") % attr
|
||||||
|
raise exc_cls(msg)
|
||||||
|
|
||||||
|
attributes.AttributeInfo.fill_post_defaults = fill_post_defaults
|
||||||
|
|
||||||
|
|
||||||
# TODO(ivar): while this block would be better place in the patch_neutron
|
# TODO(ivar): while this block would be better place in the patch_neutron
|
||||||
# module, it seems like being part of an "extension" package is the only
|
# module, it seems like being part of an "extension" package is the only
|
||||||
# way to make it work at the moment. Tests have shown that Neutorn reloads
|
# way to make it work at the moment. Tests have shown that Neutorn reloads
|
||||||
|
|
|
@ -15,11 +15,11 @@ import abc
|
||||||
from neutron.api import extensions as neutron_extensions
|
from neutron.api import extensions as neutron_extensions
|
||||||
from neutron.api.v2 import attributes as attr
|
from neutron.api.v2 import attributes as attr
|
||||||
from neutron.api.v2 import resource_helper
|
from neutron.api.v2 import resource_helper
|
||||||
from neutron.plugins.common import constants
|
|
||||||
from neutron_lib.api import converters as conv
|
from neutron_lib.api import converters as conv
|
||||||
from neutron_lib.api import extensions
|
from neutron_lib.api import extensions
|
||||||
from neutron_lib.api import validators as valid
|
from neutron_lib.api import validators as valid
|
||||||
from neutron_lib import exceptions as nexc
|
from neutron_lib import exceptions as nexc
|
||||||
|
from neutron_lib.plugins import constants
|
||||||
from neutron_lib.services import base as service_base
|
from neutron_lib.services import base as service_base
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from neutron.plugins.ml2 import driver_api as api
|
|
||||||
from neutron.plugins.ml2.drivers.openvswitch.mech_driver import (
|
from neutron.plugins.ml2.drivers.openvswitch.mech_driver import (
|
||||||
mech_openvswitch as base)
|
mech_openvswitch as base)
|
||||||
from neutron_lib.api.definitions import portbindings
|
from neutron_lib.api.definitions import portbindings
|
||||||
|
from neutron_lib.plugins.ml2 import api
|
||||||
|
|
||||||
from gbpservice.neutron.services.servicechain.plugins.ncp import plumber_base
|
from gbpservice.neutron.services.servicechain.plugins.ncp import plumber_base
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
import abc
|
import abc
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from neutron.plugins.ml2 import driver_api
|
from neutron_lib.plugins.ml2 import api as driver_api
|
||||||
|
|
||||||
BULK_EXTENDED = 'ml2plus:_bulk_extended'
|
BULK_EXTENDED = 'ml2plus:_bulk_extended'
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,6 @@ from aim import context as aim_context
|
||||||
from aim import exceptions as aim_exceptions
|
from aim import exceptions as aim_exceptions
|
||||||
from aim import utils as aim_utils
|
from aim import utils as aim_utils
|
||||||
from neutron.agent import securitygroups_rpc
|
from neutron.agent import securitygroups_rpc
|
||||||
from neutron.callbacks import events
|
|
||||||
from neutron.callbacks import registry
|
|
||||||
from neutron.callbacks import resources
|
|
||||||
from neutron.common import rpc as n_rpc
|
from neutron.common import rpc as n_rpc
|
||||||
from neutron.common import topics as n_topics
|
from neutron.common import topics as n_topics
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
|
@ -47,19 +44,21 @@ from neutron.db import models_v2
|
||||||
from neutron.db import provisioning_blocks
|
from neutron.db import provisioning_blocks
|
||||||
from neutron.db import rbac_db_models
|
from neutron.db import rbac_db_models
|
||||||
from neutron.db import segments_db
|
from neutron.db import segments_db
|
||||||
from neutron.extensions import external_net
|
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron.plugins.ml2 import db as n_db
|
from neutron.plugins.ml2 import db as n_db
|
||||||
from neutron.plugins.ml2 import driver_api as api
|
|
||||||
from neutron.plugins.ml2 import driver_context as ml2_context
|
from neutron.plugins.ml2 import driver_context as ml2_context
|
||||||
from neutron.plugins.ml2.drivers.openvswitch.agent.common import (
|
from neutron.plugins.ml2.drivers.openvswitch.agent.common import (
|
||||||
constants as a_const)
|
constants as a_const)
|
||||||
from neutron.plugins.ml2 import models
|
from neutron.plugins.ml2 import models
|
||||||
|
from neutron_lib.api.definitions import external_net
|
||||||
from neutron_lib.api.definitions import portbindings
|
from neutron_lib.api.definitions import portbindings
|
||||||
|
from neutron_lib.callbacks import events
|
||||||
|
from neutron_lib.callbacks import registry
|
||||||
|
from neutron_lib.callbacks import resources
|
||||||
from neutron_lib import constants as n_constants
|
from neutron_lib import constants as n_constants
|
||||||
from neutron_lib import context as nctx
|
from neutron_lib import context as nctx
|
||||||
from neutron_lib import exceptions as n_exceptions
|
from neutron_lib import exceptions as n_exceptions
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
|
from neutron_lib.plugins.ml2 import api
|
||||||
from opflexagent import constants as ofcst
|
from opflexagent import constants as ofcst
|
||||||
from opflexagent import host_agent_rpc as arpc
|
from opflexagent import host_agent_rpc as arpc
|
||||||
from opflexagent import rpc as ofrpc
|
from opflexagent import rpc as ofrpc
|
||||||
|
@ -2259,7 +2258,7 @@ class ApicMechanismDriver(api_plus.MechanismDriver,
|
||||||
# TODO(amitbose) Consider providing configuration options
|
# TODO(amitbose) Consider providing configuration options
|
||||||
# for picking network-type and physical-network name
|
# for picking network-type and physical-network name
|
||||||
# for the dynamic segment
|
# for the dynamic segment
|
||||||
seg_args = {api.NETWORK_TYPE: pconst.TYPE_VLAN,
|
seg_args = {api.NETWORK_TYPE: n_constants.TYPE_VLAN,
|
||||||
api.PHYSICAL_NETWORK:
|
api.PHYSICAL_NETWORK:
|
||||||
segment[api.PHYSICAL_NETWORK]}
|
segment[api.PHYSICAL_NETWORK]}
|
||||||
dyn_seg = context.allocate_dynamic_segment(seg_args)
|
dyn_seg = context.allocate_dynamic_segment(seg_args)
|
||||||
|
@ -3355,7 +3354,7 @@ class ApicMechanismDriver(api_plus.MechanismDriver,
|
||||||
return net_type == ofcst.TYPE_OPFLEX
|
return net_type == ofcst.TYPE_OPFLEX
|
||||||
|
|
||||||
def _is_supported_non_opflex_type(self, net_type):
|
def _is_supported_non_opflex_type(self, net_type):
|
||||||
return net_type in [pconst.TYPE_VLAN]
|
return net_type in [n_constants.TYPE_VLAN]
|
||||||
|
|
||||||
def _use_static_path(self, bound_segment):
|
def _use_static_path(self, bound_segment):
|
||||||
return (bound_segment and
|
return (bound_segment and
|
||||||
|
@ -3365,7 +3364,7 @@ class ApicMechanismDriver(api_plus.MechanismDriver,
|
||||||
def _convert_segment(self, segment):
|
def _convert_segment(self, segment):
|
||||||
seg = None
|
seg = None
|
||||||
if segment:
|
if segment:
|
||||||
if segment.get(api.NETWORK_TYPE) in [pconst.TYPE_VLAN]:
|
if segment.get(api.NETWORK_TYPE) in [n_constants.TYPE_VLAN]:
|
||||||
seg = 'vlan-%s' % segment[api.SEGMENTATION_ID]
|
seg = 'vlan-%s' % segment[api.SEGMENTATION_ID]
|
||||||
else:
|
else:
|
||||||
LOG.debug('Unsupported segmentation type for static path '
|
LOG.debug('Unsupported segmentation type for static path '
|
||||||
|
|
|
@ -14,10 +14,11 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from neutron.extensions import address_scope
|
from neutron.extensions import address_scope
|
||||||
|
from neutron_lib.api.definitions import address_scope as apidef
|
||||||
|
|
||||||
|
|
||||||
class Patched_address_scope(address_scope.Address_scope):
|
class Patched_address_scope(address_scope.Address_scope):
|
||||||
def update_attributes_map(self, attributes):
|
def update_attributes_map(self, attributes):
|
||||||
super(Patched_address_scope, self).update_attributes_map(
|
super(Patched_address_scope, self).update_attributes_map(
|
||||||
attributes,
|
attributes,
|
||||||
extension_attrs_map=address_scope.RESOURCE_ATTRIBUTE_MAP)
|
extension_attrs_map=apidef.RESOURCE_ATTRIBUTE_MAP)
|
||||||
|
|
|
@ -27,7 +27,6 @@ from neutron.db import api as db_api
|
||||||
from neutron.db.models import securitygroup as securitygroups_db
|
from neutron.db.models import securitygroup as securitygroups_db
|
||||||
from neutron.db import models_v2
|
from neutron.db import models_v2
|
||||||
from neutron.db import provisioning_blocks
|
from neutron.db import provisioning_blocks
|
||||||
from neutron.extensions import address_scope as as_ext
|
|
||||||
from neutron.plugins.ml2.common import exceptions as ml2_exc
|
from neutron.plugins.ml2.common import exceptions as ml2_exc
|
||||||
from neutron.plugins.ml2 import managers as ml2_managers
|
from neutron.plugins.ml2 import managers as ml2_managers
|
||||||
from neutron.plugins.ml2 import plugin as ml2_plugin
|
from neutron.plugins.ml2 import plugin as ml2_plugin
|
||||||
|
@ -140,14 +139,19 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin,
|
||||||
|
|
||||||
def _handle_security_group_change(self, resource, event, trigger,
|
def _handle_security_group_change(self, resource, event, trigger,
|
||||||
**kwargs):
|
**kwargs):
|
||||||
context = kwargs.get('context')
|
if 'payload' in kwargs:
|
||||||
security_group = kwargs.get('security_group')
|
context = kwargs['payload'].context
|
||||||
|
security_group = kwargs['payload'].desired_state
|
||||||
|
original_security_group = kwargs['payload'].states[0]
|
||||||
|
else:
|
||||||
|
context = kwargs.get('context')
|
||||||
|
security_group = kwargs.get('security_group')
|
||||||
|
original_security_group = kwargs.get('original_security_group')
|
||||||
# There is a neutron bug that sometimes it will create a SG with
|
# There is a neutron bug that sometimes it will create a SG with
|
||||||
# tenant_id field empty. We will not process it further when that
|
# tenant_id field empty. We will not process it further when that
|
||||||
# happens then.
|
# happens then.
|
||||||
if not security_group['tenant_id']:
|
if not security_group['tenant_id']:
|
||||||
return
|
return
|
||||||
original_security_group = kwargs.get('original_security_group')
|
|
||||||
mech_context = driver_context.SecurityGroupContext(
|
mech_context = driver_context.SecurityGroupContext(
|
||||||
self, context, security_group, original_security_group)
|
self, context, security_group, original_security_group)
|
||||||
if event == events.PRECOMMIT_CREATE:
|
if event == events.PRECOMMIT_CREATE:
|
||||||
|
@ -296,7 +300,7 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin,
|
||||||
'tenant_id': address_scope['tenant_id'],
|
'tenant_id': address_scope['tenant_id'],
|
||||||
'shared': address_scope['shared'],
|
'shared': address_scope['shared'],
|
||||||
'ip_version': address_scope['ip_version']}
|
'ip_version': address_scope['ip_version']}
|
||||||
self._apply_dict_extend_functions(as_ext.ADDRESS_SCOPES, res,
|
self._apply_dict_extend_functions(as_def.COLLECTION_NAME, res,
|
||||||
address_scope)
|
address_scope)
|
||||||
return self._fields(res, fields)
|
return self._fields(res, fields)
|
||||||
|
|
||||||
|
@ -481,12 +485,12 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin,
|
||||||
|
|
||||||
@gbp_extensions.disable_transaction_guard
|
@gbp_extensions.disable_transaction_guard
|
||||||
def create_address_scope(self, context, address_scope):
|
def create_address_scope(self, context, address_scope):
|
||||||
self._ensure_tenant(context, address_scope[as_ext.ADDRESS_SCOPE])
|
self._ensure_tenant(context, address_scope[as_def.ADDRESS_SCOPE])
|
||||||
with db_api.context_manager.writer.using(context):
|
with db_api.context_manager.writer.using(context):
|
||||||
result = super(Ml2PlusPlugin, self).create_address_scope(
|
result = super(Ml2PlusPlugin, self).create_address_scope(
|
||||||
context, address_scope)
|
context, address_scope)
|
||||||
self.extension_manager.process_create_address_scope(
|
self.extension_manager.process_create_address_scope(
|
||||||
context, address_scope[as_ext.ADDRESS_SCOPE], result)
|
context, address_scope[as_def.ADDRESS_SCOPE], result)
|
||||||
mech_context = driver_context.AddressScopeContext(
|
mech_context = driver_context.AddressScopeContext(
|
||||||
self, context, result)
|
self, context, result)
|
||||||
self.mechanism_manager.create_address_scope_precommit(
|
self.mechanism_manager.create_address_scope_precommit(
|
||||||
|
@ -514,7 +518,7 @@ class Ml2PlusPlugin(ml2_plugin.Ml2Plugin,
|
||||||
self).update_address_scope(
|
self).update_address_scope(
|
||||||
context, id, address_scope)
|
context, id, address_scope)
|
||||||
self.extension_manager.process_update_address_scope(
|
self.extension_manager.process_update_address_scope(
|
||||||
context, address_scope[as_ext.ADDRESS_SCOPE],
|
context, address_scope[as_def.ADDRESS_SCOPE],
|
||||||
updated_address_scope)
|
updated_address_scope)
|
||||||
mech_context = driver_context.AddressScopeContext(
|
mech_context = driver_context.AddressScopeContext(
|
||||||
self, context, updated_address_scope,
|
self, context, updated_address_scope,
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from neutron.plugins.common import constants
|
from neutron_lib.plugins import constants
|
||||||
|
|
||||||
|
|
||||||
constants.GROUP_POLICY = "GROUP_POLICY"
|
constants.GROUP_POLICY = "GROUP_POLICY"
|
||||||
|
|
|
@ -18,13 +18,13 @@ from keystoneclient.v2_0 import client as k_client
|
||||||
from neutron.common import exceptions as neutron_exc
|
from neutron.common import exceptions as neutron_exc
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.db import models_v2
|
from neutron.db import models_v2
|
||||||
from neutron.extensions import l3 as ext_l3
|
|
||||||
from neutron.extensions import securitygroup as ext_sg
|
from neutron.extensions import securitygroup as ext_sg
|
||||||
from neutron_lib.api.definitions import port as port_def
|
from neutron_lib.api.definitions import port as port_def
|
||||||
from neutron_lib import constants as n_const
|
from neutron_lib import constants as n_const
|
||||||
from neutron_lib import context as n_context
|
from neutron_lib import context as n_context
|
||||||
from neutron_lib.db import model_base
|
from neutron_lib.db import model_base
|
||||||
from neutron_lib import exceptions as n_exc
|
from neutron_lib import exceptions as n_exc
|
||||||
|
from neutron_lib.exceptions import l3 as ext_l3
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_db import exception as oslo_db_excp
|
from oslo_db import exception as oslo_db_excp
|
||||||
|
@ -1727,15 +1727,15 @@ class ResourceMappingDriver(api.PolicyDriver, ImplicitResourceOperations,
|
||||||
group_id = context.current['policy_target_group_id']
|
group_id = context.current['policy_target_group_id']
|
||||||
if context.current.get('proxy_gateway'):
|
if context.current.get('proxy_gateway'):
|
||||||
pts = context._plugin.get_policy_targets(
|
pts = context._plugin.get_policy_targets(
|
||||||
context._plugin_context, {'policy_target_group_id': group_id,
|
context._plugin_context, {'policy_target_group_id': [group_id],
|
||||||
'proxy_gateway': True})
|
'proxy_gateway': [True]})
|
||||||
pts = [x['id'] for x in pts if x['id'] != context.current['id']]
|
pts = [x['id'] for x in pts if x['id'] != context.current['id']]
|
||||||
if pts:
|
if pts:
|
||||||
exc.OnlyOneProxyGatewayAllowed(group_id=group_id)
|
exc.OnlyOneProxyGatewayAllowed(group_id=group_id)
|
||||||
if context.current.get('group_default_gateway'):
|
if context.current.get('group_default_gateway'):
|
||||||
pts = context._plugin.get_policy_targets(
|
pts = context._plugin.get_policy_targets(
|
||||||
context._plugin_context, {'policy_target_group_id': group_id,
|
context._plugin_context, {'policy_target_group_id': [group_id],
|
||||||
'group_default_gateway': True})
|
'group_default_gateway': [True]})
|
||||||
pts = [x['id'] for x in pts if x['id'] != context.current['id']]
|
pts = [x['id'] for x in pts if x['id'] != context.current['id']]
|
||||||
if pts:
|
if pts:
|
||||||
exc.OnlyOneGroupDefaultGatewayAllowed(group_id=group_id)
|
exc.OnlyOneGroupDefaultGatewayAllowed(group_id=group_id)
|
||||||
|
@ -3071,7 +3071,7 @@ class ResourceMappingDriver(api.PolicyDriver, ImplicitResourceOperations,
|
||||||
# Get all the EP for this tenant
|
# Get all the EP for this tenant
|
||||||
ep_list = context._plugin.get_external_policies(
|
ep_list = context._plugin.get_external_policies(
|
||||||
context._plugin_context,
|
context._plugin_context,
|
||||||
filters={'tenant_id': context.current['tenant_id']})
|
filters={'tenant_id': [context.current['tenant_id']]})
|
||||||
for ep in ep_list:
|
for ep in ep_list:
|
||||||
# Remove rules before the new ip_pool came
|
# Remove rules before the new ip_pool came
|
||||||
ip_pool_list = gbp_utils.convert_ip_pool_string_to_list(ip_pool)
|
ip_pool_list = gbp_utils.convert_ip_pool_string_to_list(ip_pool)
|
||||||
|
@ -3087,7 +3087,7 @@ class ResourceMappingDriver(api.PolicyDriver, ImplicitResourceOperations,
|
||||||
# Get all the EP for this tenant
|
# Get all the EP for this tenant
|
||||||
ep_list = context._plugin.get_external_policies(
|
ep_list = context._plugin.get_external_policies(
|
||||||
context._plugin_context,
|
context._plugin_context,
|
||||||
filters={'tenant_id': context.current['tenant_id']})
|
filters={'tenant_id': [context.current['tenant_id']]})
|
||||||
for ep in ep_list:
|
for ep in ep_list:
|
||||||
# Cidrs before the ip_pool removal
|
# Cidrs before the ip_pool removal
|
||||||
ip_pool_list = gbp_utils.convert_ip_pool_string_to_list(ip_pool)
|
ip_pool_list = gbp_utils.convert_ip_pool_string_to_list(ip_pool)
|
||||||
|
|
|
@ -14,11 +14,11 @@ import netaddr
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron.quota import resource_registry
|
from neutron.quota import resource_registry
|
||||||
from neutron_lib.api.definitions import portbindings
|
from neutron_lib.api.definitions import portbindings
|
||||||
from neutron_lib import constants
|
from neutron_lib import constants
|
||||||
from neutron_lib import context as n_ctx
|
from neutron_lib import context as n_ctx
|
||||||
|
from neutron_lib.plugins import constants as pconst
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_log import helpers as log
|
from oslo_log import helpers as log
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
|
@ -15,8 +15,8 @@ import time
|
||||||
from heatclient import exc as heat_exc
|
from heatclient import exc as heat_exc
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.db import models_v2 as ndb
|
from neutron.db import models_v2 as ndb
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron_lib.db import model_base
|
from neutron_lib.db import model_base
|
||||||
|
from neutron_lib.plugins import constants as pconst
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_db import exception as db_exc
|
from oslo_db import exception as db_exc
|
||||||
from oslo_log import helpers as log
|
from oslo_log import helpers as log
|
||||||
|
|
|
@ -20,9 +20,9 @@ import threading
|
||||||
from keystoneclient import exceptions as k_exceptions
|
from keystoneclient import exceptions as k_exceptions
|
||||||
from keystoneclient.v2_0 import client as keyclient
|
from keystoneclient.v2_0 import client as keyclient
|
||||||
from neutron.common import rpc as n_rpc
|
from neutron.common import rpc as n_rpc
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron_lib.db import model_base
|
from neutron_lib.db import model_base
|
||||||
from neutron_lib import exceptions as n_exc
|
from neutron_lib import exceptions as n_exc
|
||||||
|
from neutron_lib.plugins import constants as pconst
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
import oslo_messaging
|
import oslo_messaging
|
||||||
|
|
|
@ -11,8 +11,8 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron.quota import resource_registry
|
from neutron.quota import resource_registry
|
||||||
|
from neutron_lib.plugins import constants as pconst
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_log import helpers as log
|
from oslo_log import helpers as log
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from neutron.plugins.common import constants as pconst
|
from neutron_lib.plugins import constants as pconst
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
from networking_sfc.db import flowclassifier_db as flc_db
|
from networking_sfc.db import flowclassifier_db as flc_db
|
||||||
from networking_sfc.extensions import flowclassifier
|
from networking_sfc.extensions import flowclassifier
|
||||||
from networking_sfc.services.flowclassifier.drivers import base
|
from networking_sfc.services.flowclassifier.drivers import base
|
||||||
from neutron.callbacks import events
|
|
||||||
from neutron.callbacks import registry
|
|
||||||
from neutron.callbacks import resources
|
|
||||||
from neutron_lib.api import validators
|
from neutron_lib.api import validators
|
||||||
|
from neutron_lib.callbacks import events
|
||||||
|
from neutron_lib.callbacks import registry
|
||||||
|
from neutron_lib.callbacks import resources
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
||||||
|
|
|
@ -24,10 +24,10 @@ from networking_sfc.extensions import flowclassifier as flowc_ext
|
||||||
from networking_sfc.extensions import sfc as sfc_ext
|
from networking_sfc.extensions import sfc as sfc_ext
|
||||||
from networking_sfc.services.sfc.common import context as sfc_ctx
|
from networking_sfc.services.sfc.common import context as sfc_ctx
|
||||||
from networking_sfc.services.sfc.drivers import base
|
from networking_sfc.services.sfc.drivers import base
|
||||||
from neutron.callbacks import events
|
|
||||||
from neutron.callbacks import registry
|
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.db import models_v2
|
from neutron.db import models_v2
|
||||||
|
from neutron_lib.callbacks import events
|
||||||
|
from neutron_lib.callbacks import registry
|
||||||
from neutron_lib import constants as n_constants
|
from neutron_lib import constants as n_constants
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
|
@ -19,13 +19,13 @@ import webob.exc
|
||||||
import mock
|
import mock
|
||||||
from neutron.api import extensions
|
from neutron.api import extensions
|
||||||
from neutron.api.rpc.callbacks.producer import registry
|
from neutron.api.rpc.callbacks.producer import registry
|
||||||
from neutron.plugins.common import constants
|
|
||||||
from neutron import policy
|
from neutron import policy
|
||||||
from neutron.services.trunk.rpc import server as trunk_server
|
from neutron.services.trunk.rpc import server as trunk_server
|
||||||
from neutron.tests.unit.api import test_extensions
|
from neutron.tests.unit.api import test_extensions
|
||||||
from neutron.tests.unit.db import test_db_base_plugin_v2
|
from neutron.tests.unit.db import test_db_base_plugin_v2
|
||||||
from neutron_lib import constants as nl_constants
|
from neutron_lib import constants as nl_constants
|
||||||
from neutron_lib import context
|
from neutron_lib import context
|
||||||
|
from neutron_lib.plugins import constants
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_utils import importutils
|
from oslo_utils import importutils
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
import six
|
import six
|
||||||
import webob.exc
|
import webob.exc
|
||||||
|
|
||||||
from neutron.plugins.common import constants
|
|
||||||
from neutron_lib import context
|
from neutron_lib import context
|
||||||
|
from neutron_lib.plugins import constants
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from neutron.extensions import address_scope as as_ext
|
from neutron_lib.api.definitions import address_scope as as_def
|
||||||
from neutron_lib.api.definitions import subnetpool as subnetpool_def
|
from neutron_lib.api.definitions import subnetpool as subnetpool_def
|
||||||
from neutron_lib.api import extensions
|
from neutron_lib.api import extensions
|
||||||
from neutron_lib import constants
|
from neutron_lib import constants
|
||||||
|
@ -29,7 +29,7 @@ EXTENDED_ATTRIBUTES_2_0 = {
|
||||||
'is_visible': True,
|
'is_visible': True,
|
||||||
'enforce_policy': True},
|
'enforce_policy': True},
|
||||||
},
|
},
|
||||||
as_ext.ADDRESS_SCOPES: {
|
as_def.COLLECTION_NAME: {
|
||||||
'address_scope_extension': {'allow_post': True,
|
'address_scope_extension': {'allow_post': True,
|
||||||
'allow_put': True,
|
'allow_put': True,
|
||||||
'default': constants.ATTR_NOT_SPECIFIED,
|
'default': constants.ATTR_NOT_SPECIFIED,
|
||||||
|
|
|
@ -1114,7 +1114,11 @@ class TestAimMapping(ApicAimTestCase):
|
||||||
self._check_network(net)
|
self._check_network(net)
|
||||||
|
|
||||||
# updating SVI flag is not allowed
|
# updating SVI flag is not allowed
|
||||||
self._update('networks', net['id'], {SVI: 'False'}, 400)
|
data = {'network': {SVI: False}}
|
||||||
|
req = self.new_update_request('networks', data, net['id'], self.fmt)
|
||||||
|
resp = req.get_response(self.api)
|
||||||
|
self.assertEqual(resp.status_code, 400)
|
||||||
|
|
||||||
self.assertEqual(True, net[SVI])
|
self.assertEqual(True, net[SVI])
|
||||||
self._check_network(net)
|
self._check_network(net)
|
||||||
|
|
||||||
|
@ -4505,7 +4509,7 @@ class TestExtensionAttributes(ApicAimTestCase):
|
||||||
self.assertFalse(extn.get_network_extn_db(session, net2['id']))
|
self.assertFalse(extn.get_network_extn_db(session, net2['id']))
|
||||||
|
|
||||||
def test_network_with_nested_domain_lifecycle(self):
|
def test_network_with_nested_domain_lifecycle(self):
|
||||||
session = db_api.get_session()
|
session = db_api.get_reader_session()
|
||||||
extn = extn_db.ExtensionDbMixin()
|
extn = extn_db.ExtensionDbMixin()
|
||||||
vlan_dict = {'vlans_list': ['2', '3', '4', '3'],
|
vlan_dict = {'vlans_list': ['2', '3', '4', '3'],
|
||||||
'vlan_ranges': [{'start': '6', 'end': '9'},
|
'vlan_ranges': [{'start': '6', 'end': '9'},
|
||||||
|
@ -4665,11 +4669,16 @@ class TestExtensionAttributes(ApicAimTestCase):
|
||||||
dn=self.dn_t1_l1_n1,
|
dn=self.dn_t1_l1_n1,
|
||||||
nat_type='edge')
|
nat_type='edge')
|
||||||
|
|
||||||
self._update('networks', net1['id'],
|
data = {'network': {DN:
|
||||||
{'network':
|
{'ExternalNetwork': 'uni/tn-t1/out-l1/instP-n2'}}}
|
||||||
{DN: {'ExternalNetwork': 'uni/tn-t1/out-l1/instP-n2'}}},
|
req = self.new_update_request('networks', data, net1['id'], self.fmt)
|
||||||
400)
|
resp = req.get_response(self.api)
|
||||||
self._update('networks', net1['id'], {'apic:nat_type': ''}, 400)
|
self.assertEqual(resp.status_code, 400)
|
||||||
|
|
||||||
|
data = {'network': {'apic:nat_type': ''}}
|
||||||
|
req = self.new_update_request('networks', data, net1['id'], self.fmt)
|
||||||
|
resp = req.get_response(self.api)
|
||||||
|
self.assertEqual(resp.status_code, 400)
|
||||||
|
|
||||||
def test_external_subnet_lifecycle(self):
|
def test_external_subnet_lifecycle(self):
|
||||||
session = db_api.get_reader_session()
|
session = db_api.get_reader_session()
|
||||||
|
|
|
@ -85,7 +85,7 @@ class TestCiscoApicAimL3Plugin(test_aim_mapping_driver.AIMBaseTestCase):
|
||||||
'name': ROUTER}}
|
'name': ROUTER}}
|
||||||
router = self.plugin.create_router(self.context, attr)
|
router = self.plugin.create_router(self.context, attr)
|
||||||
|
|
||||||
with mock.patch('neutron.callbacks.registry.notify'):
|
with mock.patch('neutron_lib.callbacks.registry.notify'):
|
||||||
info = self.plugin.add_router_interface(self.context,
|
info = self.plugin.add_router_interface(self.context,
|
||||||
router['id'],
|
router['id'],
|
||||||
interface_info)
|
interface_info)
|
||||||
|
|
|
@ -17,6 +17,8 @@ import mock
|
||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
from neutron.api import extensions
|
from neutron.api import extensions
|
||||||
|
from neutron.conf.plugins.ml2 import config # noqa
|
||||||
|
from neutron.conf.plugins.ml2.drivers import driver_type
|
||||||
from neutron.tests.unit.api import test_extensions
|
from neutron.tests.unit.api import test_extensions
|
||||||
from neutron.tests.unit.db import test_db_base_plugin_v2 as test_plugin
|
from neutron.tests.unit.db import test_db_base_plugin_v2 as test_plugin
|
||||||
from neutron.tests.unit.extensions import test_address_scope
|
from neutron.tests.unit.extensions import test_address_scope
|
||||||
|
@ -30,6 +32,9 @@ from gbpservice.neutron.tests.unit.plugins.ml2plus.drivers import (
|
||||||
|
|
||||||
PLUGIN_NAME = 'gbpservice.neutron.plugins.ml2plus.plugin.Ml2PlusPlugin'
|
PLUGIN_NAME = 'gbpservice.neutron.plugins.ml2plus.plugin.Ml2PlusPlugin'
|
||||||
|
|
||||||
|
config.register_ml2_plugin_opts()
|
||||||
|
driver_type.register_ml2_drivers_vlan_opts()
|
||||||
|
|
||||||
|
|
||||||
# This is just a quick sanity test that basic ML2 plugin functionality
|
# This is just a quick sanity test that basic ML2 plugin functionality
|
||||||
# is preserved.
|
# is preserved.
|
||||||
|
|
|
@ -12,9 +12,9 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron_lib import constants
|
from neutron_lib import constants
|
||||||
from neutron_lib import context as nctx
|
from neutron_lib import context as nctx
|
||||||
|
from neutron_lib.plugins import constants as pconst
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
import webob.exc
|
import webob.exc
|
||||||
|
|
||||||
|
|
|
@ -19,16 +19,16 @@ from keystonemiddleware import auth_token # noqa
|
||||||
import mock
|
import mock
|
||||||
import netaddr
|
import netaddr
|
||||||
from neutron.db.qos import models as qos_models
|
from neutron.db.qos import models as qos_models
|
||||||
from neutron.extensions import external_net as external_net
|
|
||||||
from neutron.extensions import securitygroup as ext_sg
|
from neutron.extensions import securitygroup as ext_sg
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron.services.qos.drivers.openvswitch import driver as qos_ovs_driver
|
from neutron.services.qos.drivers.openvswitch import driver as qos_ovs_driver
|
||||||
from neutron.tests.unit.extensions import test_address_scope
|
from neutron.tests.unit.extensions import test_address_scope
|
||||||
from neutron.tests.unit.extensions import test_l3
|
from neutron.tests.unit.extensions import test_l3
|
||||||
from neutron.tests.unit.extensions import test_securitygroup
|
from neutron.tests.unit.extensions import test_securitygroup
|
||||||
from neutron.tests.unit.plugins.ml2 import test_plugin as n_test_plugin
|
from neutron.tests.unit.plugins.ml2 import test_plugin as n_test_plugin
|
||||||
|
from neutron_lib.api.definitions import external_net
|
||||||
from neutron_lib import constants as cst
|
from neutron_lib import constants as cst
|
||||||
from neutron_lib import context as nctx
|
from neutron_lib import context as nctx
|
||||||
|
from neutron_lib.plugins import constants as pconst
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
import unittest2
|
import unittest2
|
||||||
|
|
|
@ -16,9 +16,9 @@ import itertools
|
||||||
import copy
|
import copy
|
||||||
import heatclient
|
import heatclient
|
||||||
import mock
|
import mock
|
||||||
from neutron.extensions import external_net as external_net
|
from neutron_lib.api.definitions import external_net
|
||||||
from neutron.plugins.common import constants
|
|
||||||
from neutron_lib import context as neutron_context
|
from neutron_lib import context as neutron_context
|
||||||
|
from neutron_lib.plugins import constants
|
||||||
from oslo_serialization import jsonutils
|
from oslo_serialization import jsonutils
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
import webob
|
import webob
|
||||||
|
|
|
@ -15,9 +15,9 @@ import webob.exc
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
from neutron.common import config
|
from neutron.common import config
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron_lib import context as n_context
|
from neutron_lib import context as n_context
|
||||||
from neutron_lib import exceptions as n_exc
|
from neutron_lib import exceptions as n_exc
|
||||||
|
from neutron_lib.plugins import constants as pconst
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_serialization import jsonutils
|
from oslo_serialization import jsonutils
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
from neutron.plugins.common import constants
|
from neutron_lib.plugins import constants
|
||||||
from oslo_serialization import jsonutils
|
from oslo_serialization import jsonutils
|
||||||
import webob
|
import webob
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
from neutron.common import config # noqa
|
from neutron.common import config # noqa
|
||||||
from neutron.plugins.common import constants as pconst
|
|
||||||
from neutron_lib import context as n_context
|
from neutron_lib import context as n_context
|
||||||
|
from neutron_lib.plugins import constants as pconst
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
|
|
||||||
from gbpservice.neutron.services.servicechain.plugins.ncp import model
|
from gbpservice.neutron.services.servicechain.plugins.ncp import model
|
||||||
|
|
|
@ -21,9 +21,9 @@ from networking_sfc.services.flowclassifier.common import config as flc_cfg
|
||||||
from networking_sfc.services.flowclassifier import driver_manager as fc_driverm
|
from networking_sfc.services.flowclassifier import driver_manager as fc_driverm
|
||||||
from networking_sfc.services.sfc.common import config as sfc_cfg
|
from networking_sfc.services.sfc.common import config as sfc_cfg
|
||||||
from networking_sfc.services.sfc import driver_manager as sfc_driverm
|
from networking_sfc.services.sfc import driver_manager as sfc_driverm
|
||||||
from neutron.callbacks import exceptions as c_exc
|
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.db.models import l3 as l3_db
|
from neutron.db.models import l3 as l3_db
|
||||||
|
from neutron_lib.callbacks import exceptions as c_exc
|
||||||
from neutron_lib import context
|
from neutron_lib import context
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
|
@ -14,11 +14,11 @@ import copy
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
from neutron.plugins.common import constants
|
|
||||||
from neutron.tests import base
|
from neutron.tests import base
|
||||||
from neutron.tests.unit.api.v2 import test_base
|
from neutron.tests.unit.api.v2 import test_base
|
||||||
from neutron.tests.unit.extensions import base as test_extensions_base
|
from neutron.tests.unit.extensions import base as test_extensions_base
|
||||||
from neutron_lib import constants as n_consts
|
from neutron_lib import constants as n_consts
|
||||||
|
from neutron_lib.plugins import constants
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
from webob import exc
|
from webob import exc
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
import copy
|
import copy
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from neutron.plugins.common import constants
|
|
||||||
from neutron_lib import constants as n_constants
|
from neutron_lib import constants as n_constants
|
||||||
|
from neutron_lib.plugins import constants
|
||||||
|
|
||||||
from gbpservice.neutron.extensions import group_policy as gp
|
from gbpservice.neutron.extensions import group_policy as gp
|
||||||
from gbpservice.neutron.extensions import group_policy_mapping as gpm
|
from gbpservice.neutron.extensions import group_policy_mapping as gpm
|
||||||
|
|
|
@ -13,9 +13,9 @@
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
from neutron.plugins.common import constants
|
|
||||||
from neutron.tests.unit.api.v2 import test_base
|
from neutron.tests.unit.api.v2 import test_base
|
||||||
from neutron.tests.unit.extensions import base as test_extensions_base
|
from neutron.tests.unit.extensions import base as test_extensions_base
|
||||||
|
from neutron_lib.plugins import constants
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
from webob import exc
|
from webob import exc
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ import time
|
||||||
|
|
||||||
from heatclient import exc as heat_exc
|
from heatclient import exc as heat_exc
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.plugins.common import constants as pconst
|
from neutron_lib.plugins import constants as pconst
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_serialization import jsonutils
|
from oslo_serialization import jsonutils
|
||||||
import yaml
|
import yaml
|
||||||
|
|
|
@ -13,7 +13,7 @@ SKIP_EXERCISES=volumes,trove,swift,sahara,euca,bundle,boot_from_volume,aggregate
|
||||||
|
|
||||||
enable_plugin group-based-policy https://github.com/openstack/group-based-policy.git master
|
enable_plugin group-based-policy https://github.com/openstack/group-based-policy.git master
|
||||||
|
|
||||||
enable_plugin networking-sfc https://git.openstack.org/openstack/networking-sfc.git stable/pike
|
enable_plugin networking-sfc https://git.openstack.org/openstack/networking-sfc.git stable/queens
|
||||||
|
|
||||||
ENABLE_APIC_AIM_GATE=True
|
ENABLE_APIC_AIM_GATE=True
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ XTRACE=$(set +o | grep xtrace)
|
||||||
|
|
||||||
function prepare_gbp_devstack_pre {
|
function prepare_gbp_devstack_pre {
|
||||||
cd $TOP_DIR
|
cd $TOP_DIR
|
||||||
sudo git checkout stable/pike
|
sudo git checkout stable/queens
|
||||||
sudo sed -i 's/DEST=\/opt\/stack/DEST=\/opt\/stack\/new/g' $TOP_DIR/stackrc
|
sudo sed -i 's/DEST=\/opt\/stack/DEST=\/opt\/stack\/new/g' $TOP_DIR/stackrc
|
||||||
sudo sed -i 's/source $TOP_DIR\/lib\/neutron/source $TOP_DIR\/lib\/neutron\nsource $TOP_DIR\/lib\/neutron-legacy/g' $TOP_DIR/stack.sh
|
sudo sed -i 's/source $TOP_DIR\/lib\/neutron/source $TOP_DIR\/lib\/neutron\nsource $TOP_DIR\/lib\/neutron-legacy/g' $TOP_DIR/stack.sh
|
||||||
}
|
}
|
||||||
|
@ -25,15 +25,15 @@ function prepare_gbp_devstack_post {
|
||||||
# The following should updated when master moves to a new release
|
# The following should updated when master moves to a new release
|
||||||
# We need to do the following since the infra job clones these repos and
|
# We need to do the following since the infra job clones these repos and
|
||||||
# checks out the master branch (as this is the master branch) and later
|
# checks out the master branch (as this is the master branch) and later
|
||||||
# does not switch to the stable/pike branch when installing devstack
|
# does not switch to the stable/queens branch when installing devstack
|
||||||
# since the repo is already present.
|
# since the repo is already present.
|
||||||
# This can be worked around by changing the job description in
|
# This can be worked around by changing the job description in
|
||||||
# project-config to set BRANCH_OVERRIDE to use the stable/pike branch
|
# project-config to set BRANCH_OVERRIDE to use the stable/queens branch
|
||||||
sudo git --git-dir=/opt/stack/new/neutron/.git --work-tree=/opt/stack/new/neutron checkout stable/pike
|
sudo git --git-dir=/opt/stack/new/neutron/.git --work-tree=/opt/stack/new/neutron checkout stable/queens
|
||||||
sudo git --git-dir=/opt/stack/new/nova/.git --work-tree=/opt/stack/new/nova checkout stable/pike
|
sudo git --git-dir=/opt/stack/new/nova/.git --work-tree=/opt/stack/new/nova checkout stable/queens
|
||||||
sudo git --git-dir=/opt/stack/new/keystone/.git --work-tree=/opt/stack/new/keystone checkout stable/pike
|
sudo git --git-dir=/opt/stack/new/keystone/.git --work-tree=/opt/stack/new/keystone checkout stable/queens
|
||||||
sudo git --git-dir=/opt/stack/new/cinder/.git --work-tree=/opt/stack/new/cinder checkout stable/pike
|
sudo git --git-dir=/opt/stack/new/cinder/.git --work-tree=/opt/stack/new/cinder checkout stable/queens
|
||||||
sudo git --git-dir=/opt/stack/new/requirements/.git --work-tree=/opt/stack/new/requirements checkout stable/pike
|
sudo git --git-dir=/opt/stack/new/requirements/.git --work-tree=/opt/stack/new/requirements checkout stable/queens
|
||||||
|
|
||||||
source $TOP_DIR/functions
|
source $TOP_DIR/functions
|
||||||
source $TOP_DIR/functions-common
|
source $TOP_DIR/functions-common
|
||||||
|
|
|
@ -2,5 +2,5 @@
|
||||||
# of appearance. Changing the order has an impact on the overall integration
|
# of appearance. Changing the order has an impact on the overall integration
|
||||||
# process, which may cause wedges in the gate later.
|
# process, which may cause wedges in the gate later.
|
||||||
|
|
||||||
pbr>=1.6
|
pbr>=2.0.0,!=2.1.0 # Apache-2.0
|
||||||
oslosphinx>=2.5.0,<2.6.0 # Apache-2.0
|
oslosphinx>=4.7.0,<4.19.0 # Apache-2.0
|
||||||
|
|
|
@ -154,9 +154,9 @@ function run_tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
function copy_subunit_log {
|
function copy_subunit_log {
|
||||||
LOGNAME=`cat .testrepository/next-stream`
|
LOGNAME=`cat .stestr/next-stream`
|
||||||
LOGNAME=$(($LOGNAME - 1))
|
LOGNAME=$(($LOGNAME - 1))
|
||||||
LOGNAME=".testrepository/${LOGNAME}"
|
LOGNAME=".stestr/${LOGNAME}"
|
||||||
cp $LOGNAME subunit.log
|
cp $LOGNAME subunit.log
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,42 +2,41 @@
|
||||||
# of appearance. Changing the order has an impact on the overall integration
|
# of appearance. Changing the order has an impact on the overall integration
|
||||||
# process, which may cause wedges in the gate later.
|
# process, which may cause wedges in the gate later.
|
||||||
|
|
||||||
-e git+https://git.openstack.org/openstack/neutron.git@stable/pike#egg=neutron
|
-e git+https://git.openstack.org/openstack/neutron.git@stable/queens#egg=neutron
|
||||||
|
|
||||||
-e git+https://github.com/noironetworks/apicapi.git@master#egg=apicapi
|
-e git+https://github.com/noironetworks/apicapi.git@master#egg=apicapi
|
||||||
|
|
||||||
-e git+https://github.com/noironetworks/python-opflex-agent.git@master#egg=python-opflexagent-agent
|
-e git+https://github.com/noironetworks/python-opflex-agent.git@master#egg=python-opflexagent-agent
|
||||||
|
|
||||||
-e git+https://github.com/openstack/vmware-nsx.git@stable/pike#egg=vmware_nsx
|
-e git+https://github.com/openstack/vmware-nsx.git@stable/queens#egg=vmware_nsx
|
||||||
-e git+https://github.com/openstack/vmware-nsxlib.git@stable/pike#egg=vmware_nsxlib
|
-e git+https://github.com/openstack/vmware-nsxlib.git@stable/queens#egg=vmware_nsxlib
|
||||||
|
|
||||||
-e git+https://git.openstack.org/openstack/python-group-based-policy-client@master#egg=gbpclient
|
-e git+https://git.openstack.org/openstack/python-group-based-policy-client@master#egg=gbpclient
|
||||||
-e git+https://git.openstack.org/openstack/neutron-vpnaas@stable/pike#egg=neutron-vpnaas
|
-e git+https://git.openstack.org/openstack/neutron-vpnaas@stable/queens#egg=neutron-vpnaas
|
||||||
-e git+https://git.openstack.org/openstack/neutron-lbaas@stable/pike#egg=neutron-lbaas
|
-e git+https://git.openstack.org/openstack/neutron-lbaas@stable/queens#egg=neutron-lbaas
|
||||||
-e git+https://git.openstack.org/openstack/neutron-fwaas@stable/pike#egg=neutron-fwaas
|
-e git+https://git.openstack.org/openstack/neutron-fwaas@stable/queens#egg=neutron-fwaas
|
||||||
-e git+https://git.openstack.org/openstack/networking-sfc@stable/pike#egg=networking-sfc
|
-e git+https://git.openstack.org/openstack/networking-sfc@stable/queens#egg=networking-sfc
|
||||||
hacking<0.12,>=0.11.0 # Apache-2.0
|
hacking<0.12,>=0.11.0 # Apache-2.0
|
||||||
|
|
||||||
cliff>=2.3.0 # Apache-2.0
|
cliff>=2.8.0,!=2.9.0 # Apache-2.0
|
||||||
coverage>=4.0 # Apache-2.0
|
coverage!=4.4,>=4.0 # Apache-2.0
|
||||||
fixtures>=3.0.0 # Apache-2.0/BSD
|
fixtures>=3.0.0 # Apache-2.0/BSD
|
||||||
httplib2>=0.7.5
|
httplib2>=0.9.1 # MIT
|
||||||
mock>=2.0 # BSD
|
mock>=2.0 # BSD
|
||||||
python-subunit>=0.0.18 # Apache-2.0/BSD
|
python-subunit>=1.0.0 # Apache-2.0/BSD
|
||||||
requests-mock>=1.1 # Apache-2.0
|
requests-mock>=1.1 # Apache-2.0
|
||||||
sphinx!=1.3b1,<1.3,>=1.2.1 # BSD
|
sphinx!=1.6.6,>=1.6.2 # BSD
|
||||||
ordereddict
|
ordereddict
|
||||||
testrepository>=0.0.18 # Apache-2.0/BSD
|
testtools>=2.2.0 # MIT
|
||||||
testtools>=1.4.0 # MIT
|
testresources>=2.0.0 # Apache-2.0/BSD
|
||||||
testresources>=0.2.4 # Apache-2.0/BSD
|
|
||||||
testscenarios>=0.4 # Apache-2.0/BSD
|
testscenarios>=0.4 # Apache-2.0/BSD
|
||||||
WebTest>=2.0 # MIT
|
WebTest>=2.0.27 # MIT
|
||||||
oslotest>=1.10.0 # Apache-2.0
|
oslotest>=3.2.0 # Apache-2.0
|
||||||
os-testr>=0.8.0 # Apache-2.0
|
os-testr>=1.0.0 # Apache-2.0
|
||||||
ddt>=1.0.1 # MIT
|
ddt>=1.0.1 # MIT
|
||||||
pylint==1.4.5 # GNU GPL v2
|
pylint==1.4.5 # GPLv2
|
||||||
reno>=1.8.0 # Apache2
|
reno>=2.5.0 # Apache-2.0
|
||||||
pyOpenSSL>=0.14.0,<=0.15.1
|
pyOpenSSL>=16.2.0 # Apache-2.0
|
||||||
|
|
||||||
# Since version numbers for these are specified in
|
# Since version numbers for these are specified in
|
||||||
# https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt,
|
# https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt,
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
DIR=/home/zuul/src/git.openstack.org/openstack/requirements
|
DIR=/home/zuul/src/git.openstack.org/openstack/requirements
|
||||||
if [ -d "$DIR" ]; then
|
if [ -d "$DIR" ]; then
|
||||||
cd $DIR
|
cd $DIR
|
||||||
git checkout stable/pike
|
git checkout stable/queens
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
2
tox.ini
2
tox.ini
|
@ -9,7 +9,7 @@ setenv = VIRTUAL_ENV={envdir}
|
||||||
passenv = TRACE_FAILONLY GENERATE_HASHES http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
|
passenv = TRACE_FAILONLY GENERATE_HASHES http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
|
||||||
usedevelop = True
|
usedevelop = True
|
||||||
install_command =
|
install_command =
|
||||||
{toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/pike} {opts} {packages}
|
{toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/queens} {opts} {packages}
|
||||||
deps = -r{toxinidir}/requirements.txt
|
deps = -r{toxinidir}/requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
whitelist_externals = sh
|
whitelist_externals = sh
|
||||||
|
|
Loading…
Reference in New Issue