Merge "Remove _standard_attr_segment_lib and use definition from neutron-lib"
This commit is contained in:
commit
6c640aff37
neutron
db
extensions
services/segments
tests/unit/extensions
@ -20,6 +20,7 @@ import itertools
|
||||
import netaddr
|
||||
from neutron_lib.api.definitions import ip_allocation as ipalloc_apidef
|
||||
from neutron_lib.api.definitions import portbindings
|
||||
from neutron_lib.api.definitions import segment
|
||||
from neutron_lib.api import validators
|
||||
from neutron_lib import constants as const
|
||||
from neutron_lib.db import api as db_api
|
||||
@ -35,7 +36,6 @@ from neutron._i18n import _
|
||||
from neutron.common import ipv6_utils
|
||||
from neutron.db import db_base_plugin_common
|
||||
from neutron.db import models_v2
|
||||
from neutron.extensions import segment
|
||||
from neutron.ipam import exceptions as ipam_exceptions
|
||||
from neutron.ipam import utils as ipam_utils
|
||||
from neutron.objects import address_scope as addr_scope_obj
|
||||
|
@ -14,6 +14,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from neutron_lib.api.definitions import segment
|
||||
from neutron_lib.db import constants as db_const
|
||||
from neutron_lib.db import model_base
|
||||
from neutron_lib.db import standard_attr
|
||||
@ -21,7 +22,6 @@ import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
|
||||
from neutron.db import models_v2
|
||||
from neutron.extensions import segment
|
||||
|
||||
|
||||
# Some standalone plugins need a DB table to store provider
|
||||
@ -51,7 +51,7 @@ class NetworkSegment(standard_attr.HasStandardAttributes,
|
||||
backref=orm.backref("segments",
|
||||
lazy='subquery',
|
||||
cascade='delete'))
|
||||
api_collections = [segment.SEGMENTS]
|
||||
api_collections = [segment.COLLECTION_NAME]
|
||||
|
||||
__table_args__ = (
|
||||
sa.UniqueConstraint(
|
||||
|
@ -1,30 +0,0 @@
|
||||
# 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.
|
||||
|
||||
"""
|
||||
TODO(hongbin): This module should be deleted once neutron-lib containing
|
||||
https://review.opendev.org/#/c/562331/ change is released.
|
||||
"""
|
||||
|
||||
|
||||
ALIAS = 'standard-attr-segment'
|
||||
IS_SHIM_EXTENSION = True
|
||||
IS_STANDARD_ATTR_EXTENSION = True
|
||||
NAME = 'Standard Attribute Segment Extension'
|
||||
DESCRIPTION = 'Add standard attributes to Segment resource'
|
||||
UPDATED_TIMESTAMP = '2018-04-09T10:00:00-00:00'
|
||||
RESOURCE_ATTRIBUTE_MAP = {}
|
||||
SUB_RESOURCE_ATTRIBUTE_MAP = {}
|
||||
ACTION_MAP = {}
|
||||
REQUIRED_EXTENSIONS = []
|
||||
OPTIONAL_EXTENSIONS = []
|
||||
ACTION_STATUS = {}
|
@ -14,138 +14,33 @@
|
||||
|
||||
import abc
|
||||
|
||||
from neutron_lib.api import converters
|
||||
from neutron_lib.api.definitions import provider_net as providernet
|
||||
from neutron_lib.api.definitions import subnet as subnet_def
|
||||
from neutron_lib.api.definitions import segment as apidef
|
||||
from neutron_lib.api import extensions as api_extensions
|
||||
from neutron_lib import constants
|
||||
from neutron_lib.db import constants as db_const
|
||||
from neutron_lib.plugins import directory
|
||||
|
||||
from neutron.api import extensions
|
||||
from neutron.api.v2 import base
|
||||
from neutron.extensions import _standard_attr_segment_lib as stdattrseg_apidef
|
||||
from neutron.extensions import standardattrdescription as ext_stddesc
|
||||
|
||||
SEGMENT = 'segment'
|
||||
SEGMENTS = '%ss' % SEGMENT
|
||||
SEGMENT_ID = 'segment_id'
|
||||
|
||||
NETWORK_TYPE = 'network_type'
|
||||
PHYSICAL_NETWORK = 'physical_network'
|
||||
SEGMENTATION_ID = 'segmentation_id'
|
||||
NAME_LEN = db_const.NAME_FIELD_SIZE
|
||||
DESC_LEN = db_const.DESCRIPTION_FIELD_SIZE
|
||||
|
||||
# Attribute Map
|
||||
RESOURCE_ATTRIBUTE_MAP = {
|
||||
SEGMENTS: {
|
||||
'id': {'allow_post': False,
|
||||
'allow_put': False,
|
||||
'validate': {'type:uuid': None},
|
||||
'is_filter': True,
|
||||
'is_sort_key': True,
|
||||
'is_visible': True,
|
||||
'primary_key': True},
|
||||
'tenant_id': {'allow_post': True,
|
||||
'allow_put': False,
|
||||
'validate': {'type:string':
|
||||
db_const.PROJECT_ID_FIELD_SIZE},
|
||||
'is_sort_key': True,
|
||||
'is_visible': False},
|
||||
'network_id': {'allow_post': True,
|
||||
'allow_put': False,
|
||||
'validate': {'type:uuid': None},
|
||||
'is_filter': True,
|
||||
'is_sort_key': True,
|
||||
'is_visible': True},
|
||||
PHYSICAL_NETWORK: {'allow_post': True,
|
||||
'allow_put': False,
|
||||
'default': constants.ATTR_NOT_SPECIFIED,
|
||||
'validate': {'type:string':
|
||||
providernet.PHYSICAL_NETWORK_MAX_LEN},
|
||||
'is_filter': True,
|
||||
'is_sort_key': True,
|
||||
'is_visible': True},
|
||||
NETWORK_TYPE: {'allow_post': True,
|
||||
'allow_put': False,
|
||||
'validate': {'type:string':
|
||||
providernet.NETWORK_TYPE_MAX_LEN},
|
||||
'is_filter': True,
|
||||
'is_sort_key': True,
|
||||
'is_visible': True},
|
||||
SEGMENTATION_ID: {'allow_post': True,
|
||||
'allow_put': False,
|
||||
'default': constants.ATTR_NOT_SPECIFIED,
|
||||
'convert_to': converters.convert_to_int,
|
||||
'is_sort_key': True,
|
||||
'is_visible': True},
|
||||
'name': {'allow_post': True,
|
||||
'allow_put': True,
|
||||
'default': constants.ATTR_NOT_SPECIFIED,
|
||||
'validate': {'type:string_or_none': NAME_LEN},
|
||||
'is_filter': True,
|
||||
'is_sort_key': True,
|
||||
'is_visible': True}
|
||||
},
|
||||
subnet_def.COLLECTION_NAME: {
|
||||
SEGMENT_ID: {'allow_post': True,
|
||||
'allow_put': False,
|
||||
'default': None,
|
||||
'validate': {'type:uuid_or_none': None},
|
||||
'is_filter': True,
|
||||
'is_visible': True, },
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
class Segment(api_extensions.ExtensionDescriptor):
|
||||
class Segment(api_extensions.APIExtensionDescriptor):
|
||||
"""Extension class supporting Segments."""
|
||||
|
||||
@classmethod
|
||||
def get_name(cls):
|
||||
return "Segment"
|
||||
|
||||
@classmethod
|
||||
def get_alias(cls):
|
||||
return "segment"
|
||||
|
||||
@classmethod
|
||||
def get_description(cls):
|
||||
return "Segments extension."
|
||||
|
||||
@classmethod
|
||||
def get_updated(cls):
|
||||
return "2016-02-24T17:00:00-00:00"
|
||||
api_definition = apidef
|
||||
|
||||
@classmethod
|
||||
def get_resources(cls):
|
||||
"""Returns Extended Resource for service type management."""
|
||||
resource_attributes = RESOURCE_ATTRIBUTE_MAP[SEGMENTS]
|
||||
attr_map = apidef.RESOURCE_ATTRIBUTE_MAP[apidef.COLLECTION_NAME]
|
||||
controller = base.create_resource(
|
||||
SEGMENTS,
|
||||
SEGMENT,
|
||||
directory.get_plugin(SEGMENTS),
|
||||
resource_attributes,
|
||||
apidef.COLLECTION_NAME,
|
||||
apidef.RESOURCE_NAME,
|
||||
directory.get_plugin(apidef.COLLECTION_NAME),
|
||||
attr_map,
|
||||
allow_pagination=True,
|
||||
allow_sorting=True)
|
||||
return [extensions.ResourceExtension(SEGMENTS,
|
||||
return [extensions.ResourceExtension(apidef.COLLECTION_NAME,
|
||||
controller,
|
||||
attr_map=resource_attributes)]
|
||||
|
||||
def update_attributes_map(self, attributes):
|
||||
super(Segment, self).update_attributes_map(
|
||||
attributes, extension_attrs_map=RESOURCE_ATTRIBUTE_MAP)
|
||||
|
||||
def get_extended_resources(self, version):
|
||||
if version == "2.0":
|
||||
return RESOURCE_ATTRIBUTE_MAP
|
||||
else:
|
||||
return {}
|
||||
|
||||
def get_required_extensions(self):
|
||||
return [ext_stddesc.Standardattrdescription.get_alias(),
|
||||
stdattrseg_apidef.ALIAS]
|
||||
attr_map=attr_map)]
|
||||
|
||||
|
||||
class SegmentPluginBase(object, metaclass=abc.ABCMeta):
|
||||
@ -247,7 +142,7 @@ class SegmentPluginBase(object, metaclass=abc.ABCMeta):
|
||||
|
||||
@classmethod
|
||||
def get_plugin_type(cls):
|
||||
return SEGMENTS
|
||||
return apidef.COLLECTION_NAME
|
||||
|
||||
@classmethod
|
||||
def is_loaded(cls):
|
||||
|
@ -10,7 +10,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from neutron.extensions import _standard_attr_segment_lib as apidef
|
||||
from neutron_lib.api.definitions import standard_attr_segment as apidef
|
||||
from neutron_lib.api import extensions
|
||||
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from neutron_lib.api.definitions import segment as extension
|
||||
from neutron_lib.callbacks import events
|
||||
from neutron_lib.callbacks import registry
|
||||
from neutron_lib.callbacks import resources
|
||||
@ -31,7 +32,6 @@ from oslo_utils import uuidutils
|
||||
|
||||
from neutron.common import utils
|
||||
from neutron.db import segments_db as db
|
||||
from neutron.extensions import segment as extension
|
||||
from neutron import manager
|
||||
from neutron.objects import base as base_obj
|
||||
from neutron.objects import network
|
||||
|
@ -63,7 +63,7 @@ class SegmentTestExtensionManager(object):
|
||||
|
||||
def get_resources(self):
|
||||
ext_segment.Segment().update_attributes_map(
|
||||
{ext_segment.SEGMENTS: ext_stddesc.DESCRIPTION_BODY})
|
||||
{seg_apidef.COLLECTION_NAME: ext_stddesc.DESCRIPTION_BODY})
|
||||
return ext_segment.Segment.get_resources()
|
||||
|
||||
def get_actions(self):
|
||||
@ -1865,7 +1865,7 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase):
|
||||
# Need notifier here
|
||||
self.patch_notifier.stop()
|
||||
self._mock_keystone_auth()
|
||||
self.segments_plugin = directory.get_plugin(ext_segment.SEGMENTS)
|
||||
self.segments_plugin = directory.get_plugin(seg_apidef.COLLECTION_NAME)
|
||||
|
||||
nova_updater = self.segments_plugin.nova_updater
|
||||
nova_updater.p_client = mock.MagicMock()
|
||||
|
Loading…
x
Reference in New Issue
Block a user