From 8d0e5dac4d99b97d91db4e3781677bf83fc656aa Mon Sep 17 00:00:00 2001 From: Roey Chen Date: Sun, 16 Aug 2015 06:29:26 -0700 Subject: [PATCH] NSX plugin: Moving away plugin extensions As part of plugin decomposition, this patch moves vmware-nsx extensions out of the neutron repository. Change-Id: Iff4c4781dd96b10733a98f176cf2f0f4d25cb34f Related-Blueprint: core-vendor-decomposition Partial-bug: #1483453 --- neutron/plugins/vmware/__init__.py | 3 - neutron/plugins/vmware/extensions/__init__.py | 0 .../extensions/advancedserviceproviders.py | 51 ---- neutron/plugins/vmware/extensions/lsn.py | 78 ------ .../plugins/vmware/extensions/maclearning.py | 58 ---- .../plugins/vmware/extensions/networkgw.py | 261 ------------------ neutron/plugins/vmware/extensions/nvp_qos.py | 36 --- neutron/plugins/vmware/extensions/qos.py | 225 --------------- .../plugins/vmware/extensions/routertype.py | 61 ---- .../plugins/vmware/extensions/vnicindex.py | 53 ---- 10 files changed, 826 deletions(-) delete mode 100644 neutron/plugins/vmware/extensions/__init__.py delete mode 100644 neutron/plugins/vmware/extensions/advancedserviceproviders.py delete mode 100644 neutron/plugins/vmware/extensions/lsn.py delete mode 100644 neutron/plugins/vmware/extensions/maclearning.py delete mode 100644 neutron/plugins/vmware/extensions/networkgw.py delete mode 100644 neutron/plugins/vmware/extensions/nvp_qos.py delete mode 100644 neutron/plugins/vmware/extensions/qos.py delete mode 100644 neutron/plugins/vmware/extensions/routertype.py delete mode 100644 neutron/plugins/vmware/extensions/vnicindex.py diff --git a/neutron/plugins/vmware/__init__.py b/neutron/plugins/vmware/__init__.py index a62818888..e69de29bb 100644 --- a/neutron/plugins/vmware/__init__.py +++ b/neutron/plugins/vmware/__init__.py @@ -1,3 +0,0 @@ -import os - -NSX_EXT_PATH = os.path.join(os.path.dirname(__file__), 'extensions') diff --git a/neutron/plugins/vmware/extensions/__init__.py b/neutron/plugins/vmware/extensions/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/neutron/plugins/vmware/extensions/advancedserviceproviders.py b/neutron/plugins/vmware/extensions/advancedserviceproviders.py deleted file mode 100644 index f82fc3aa6..000000000 --- a/neutron/plugins/vmware/extensions/advancedserviceproviders.py +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2015 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. - -from neutron.api import extensions - -# Attribute Map -ADV_SERVICE_PROVIDERS = 'advanced_service_providers' - - -EXTENDED_ATTRIBUTES_2_0 = { - 'subnets': { - ADV_SERVICE_PROVIDERS: - {'allow_post': False, - 'allow_put': False, - 'is_visible': True, - 'default': None}}} - - -class Advancedserviceproviders(extensions.ExtensionDescriptor): - @classmethod - def get_name(cls): - return "Advanced Service Providers" - - @classmethod - def get_alias(cls): - return "advanced-service-providers" - - @classmethod - def get_description(cls): - return "Id of the advanced service providers attached to the subnet" - - @classmethod - def get_updated(cls): - return "2014-12-11T12:00:00-00:00" - - def get_extended_resources(self, version): - if version == "2.0": - return EXTENDED_ATTRIBUTES_2_0 - else: - return {} diff --git a/neutron/plugins/vmware/extensions/lsn.py b/neutron/plugins/vmware/extensions/lsn.py deleted file mode 100644 index 28ea8a0d7..000000000 --- a/neutron/plugins/vmware/extensions/lsn.py +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright 2014 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. -# - -from neutron.api import extensions -from neutron.api.v2 import base -from neutron import manager - - -EXT_ALIAS = 'lsn' -COLLECTION_NAME = "%ss" % EXT_ALIAS - -RESOURCE_ATTRIBUTE_MAP = { - COLLECTION_NAME: { - 'network': {'allow_post': True, 'allow_put': False, - 'validate': {'type:string': None}, - 'is_visible': True}, - 'report': {'allow_post': False, 'allow_put': False, - 'is_visible': True}, - 'tenant_id': {'allow_post': True, 'allow_put': False, - 'required_by_policy': True, - 'validate': {'type:string': None}, 'is_visible': True}, - }, -} - - -class Lsn(extensions.ExtensionDescriptor): - """Enable LSN configuration for Neutron NSX networks.""" - - @classmethod - def get_name(cls): - return "Logical Service Node configuration" - - @classmethod - def get_alias(cls): - return EXT_ALIAS - - @classmethod - def get_description(cls): - return "Enables configuration of NSX Logical Services Node." - - @classmethod - def get_updated(cls): - return "2013-10-05T10:00:00-00:00" - - @classmethod - def get_resources(cls): - """Returns Ext Resources.""" - exts = [] - plugin = manager.NeutronManager.get_plugin() - resource_name = EXT_ALIAS - collection_name = resource_name.replace('_', '-') + "s" - params = RESOURCE_ATTRIBUTE_MAP.get(COLLECTION_NAME, dict()) - controller = base.create_resource(collection_name, - resource_name, - plugin, params, allow_bulk=False) - ex = extensions.ResourceExtension(collection_name, controller) - exts.append(ex) - return exts - - def get_extended_resources(self, version): - if version == "2.0": - return RESOURCE_ATTRIBUTE_MAP - else: - return {} diff --git a/neutron/plugins/vmware/extensions/maclearning.py b/neutron/plugins/vmware/extensions/maclearning.py deleted file mode 100644 index c73618ab4..000000000 --- a/neutron/plugins/vmware/extensions/maclearning.py +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright 2013 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. - -from neutron.api import extensions -from neutron.api.v2 import attributes - - -MAC_LEARNING = 'mac_learning_enabled' -EXTENDED_ATTRIBUTES_2_0 = { - 'ports': { - MAC_LEARNING: {'allow_post': True, 'allow_put': True, - 'convert_to': attributes.convert_to_boolean, - 'default': attributes.ATTR_NOT_SPECIFIED, - 'is_visible': True}, - } -} - - -class Maclearning(extensions.ExtensionDescriptor): - """Extension class supporting port mac learning.""" - - @classmethod - def get_name(cls): - return "MAC Learning" - - @classmethod - def get_alias(cls): - return "mac-learning" - - @classmethod - def get_description(cls): - return "Provides MAC learning capabilities." - - @classmethod - def get_updated(cls): - return "2013-05-1T10:00:00-00:00" - - @classmethod - def get_resources(cls): - """Returns Ext Resources.""" - return [] - - def get_extended_resources(self, version): - if version == "2.0": - return EXTENDED_ATTRIBUTES_2_0 - else: - return {} diff --git a/neutron/plugins/vmware/extensions/networkgw.py b/neutron/plugins/vmware/extensions/networkgw.py deleted file mode 100644 index aac070360..000000000 --- a/neutron/plugins/vmware/extensions/networkgw.py +++ /dev/null @@ -1,261 +0,0 @@ -# Copyright 2013 VMware. 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. -# - -import abc - -from oslo_config import cfg - -from neutron.api import extensions -from neutron.api.v2 import attributes -from neutron.api.v2 import resource_helper - -GATEWAY_RESOURCE_NAME = "network_gateway" -DEVICE_RESOURCE_NAME = "gateway_device" -# Use dash for alias and collection name -EXT_ALIAS = GATEWAY_RESOURCE_NAME.replace('_', '-') -NETWORK_GATEWAYS = "%ss" % EXT_ALIAS -GATEWAY_DEVICES = "%ss" % DEVICE_RESOURCE_NAME.replace('_', '-') -DEVICE_ID_ATTR = 'id' -IFACE_NAME_ATTR = 'interface_name' - - -# TODO(salv-orlando): This type definition is duplicated into -# openstack/vmware-nsx. This temporary duplication should be removed once the -# plugin decomposition is finished. -# Allowed network types for the NSX Plugin -class NetworkTypes(object): - """Allowed provider network types for the NSX Plugin.""" - L3_EXT = 'l3_ext' - STT = 'stt' - GRE = 'gre' - FLAT = 'flat' - VLAN = 'vlan' - BRIDGE = 'bridge' - -# Attribute Map for Network Gateway Resource -# TODO(salvatore-orlando): add admin state as other neutron resources -RESOURCE_ATTRIBUTE_MAP = { - NETWORK_GATEWAYS: { - 'id': {'allow_post': False, 'allow_put': False, - 'is_visible': True}, - 'name': {'allow_post': True, 'allow_put': True, - 'validate': {'type:string': attributes.NAME_MAX_LEN}, - 'is_visible': True, 'default': ''}, - 'default': {'allow_post': False, 'allow_put': False, - 'is_visible': True}, - 'devices': {'allow_post': True, 'allow_put': False, - 'validate': {'type:device_list': None}, - 'is_visible': True}, - 'ports': {'allow_post': False, 'allow_put': False, - 'default': [], - 'is_visible': True}, - 'tenant_id': {'allow_post': True, 'allow_put': False, - 'validate': {'type:string': - attributes.TENANT_ID_MAX_LEN}, - 'required_by_policy': True, - 'is_visible': True} - }, - GATEWAY_DEVICES: { - 'id': {'allow_post': False, 'allow_put': False, - 'is_visible': True}, - 'name': {'allow_post': True, 'allow_put': True, - 'validate': {'type:string': attributes.NAME_MAX_LEN}, - 'is_visible': True, 'default': ''}, - 'client_certificate': {'allow_post': True, 'allow_put': True, - 'validate': {'type:string': None}, - 'is_visible': True}, - 'connector_type': {'allow_post': True, 'allow_put': True, - 'validate': {'type:connector_type': None}, - 'is_visible': True}, - 'connector_ip': {'allow_post': True, 'allow_put': True, - 'validate': {'type:ip_address': None}, - 'is_visible': True}, - 'tenant_id': {'allow_post': True, 'allow_put': False, - 'validate': {'type:string': - attributes.TENANT_ID_MAX_LEN}, - 'required_by_policy': True, - 'is_visible': True}, - 'status': {'allow_post': False, 'allow_put': False, - 'is_visible': True}, - } -} - - -def _validate_device_list(data, valid_values=None): - """Validate the list of service definitions.""" - if not data: - # Devices must be provided - msg = _("Cannot create a gateway with an empty device list") - return msg - try: - for device in data: - key_specs = {DEVICE_ID_ATTR: - {'type:regex': attributes.UUID_PATTERN, - 'required': True}, - IFACE_NAME_ATTR: - {'type:string': None, - 'required': False}} - err_msg = attributes._validate_dict( - device, key_specs=key_specs) - if err_msg: - return err_msg - unexpected_keys = [key for key in device if key not in key_specs] - if unexpected_keys: - err_msg = (_("Unexpected keys found in device description:%s") - % ",".join(unexpected_keys)) - return err_msg - except TypeError: - return (_("%s: provided data are not iterable") % - _validate_device_list.__name__) - - -def _validate_connector_type(data, valid_values=None): - if not data: - # A connector type is compulsory - msg = _("A connector type is required to create a gateway device") - return msg - connector_types = (valid_values if valid_values else - [NetworkTypes.GRE, - NetworkTypes.STT, - NetworkTypes.BRIDGE, - 'ipsec%s' % NetworkTypes.GRE, - 'ipsec%s' % NetworkTypes.STT]) - if data not in connector_types: - msg = _("Unknown connector type: %s") % data - return msg - - -nw_gw_quota_opts = [ - cfg.IntOpt('quota_network_gateway', - default=5, - help=_('Number of network gateways allowed per tenant, ' - '-1 for unlimited')) -] - -cfg.CONF.register_opts(nw_gw_quota_opts, 'QUOTAS') - -attributes.validators['type:device_list'] = _validate_device_list -attributes.validators['type:connector_type'] = _validate_connector_type - - -class Networkgw(extensions.ExtensionDescriptor): - """API extension for Layer-2 Gateway support. - - The Layer-2 gateway feature allows for connecting neutron networks - with external networks at the layer-2 level. No assumption is made on - the location of the external network, which might not even be directly - reachable from the hosts where the VMs are deployed. - - This is achieved by instantiating 'network gateways', and then connecting - Neutron network to them. - """ - - @classmethod - def get_name(cls): - return "Network Gateway" - - @classmethod - def get_alias(cls): - return EXT_ALIAS - - @classmethod - def get_description(cls): - return "Connects Neutron networks with external networks at layer 2." - - @classmethod - def get_updated(cls): - return "2014-01-01T00:00:00-00:00" - - @classmethod - def get_resources(cls): - """Returns Ext Resources.""" - - member_actions = { - GATEWAY_RESOURCE_NAME.replace('_', '-'): { - 'connect_network': 'PUT', - 'disconnect_network': 'PUT'}} - - plural_mappings = resource_helper.build_plural_mappings( - {}, RESOURCE_ATTRIBUTE_MAP) - - return resource_helper.build_resource_info(plural_mappings, - RESOURCE_ATTRIBUTE_MAP, - None, - action_map=member_actions, - register_quota=True, - translate_name=True) - - def get_extended_resources(self, version): - if version == "2.0": - return RESOURCE_ATTRIBUTE_MAP - else: - return {} - - -class NetworkGatewayPluginBase(object): - - @abc.abstractmethod - def create_network_gateway(self, context, network_gateway): - pass - - @abc.abstractmethod - def update_network_gateway(self, context, id, network_gateway): - pass - - @abc.abstractmethod - def get_network_gateway(self, context, id, fields=None): - pass - - @abc.abstractmethod - def delete_network_gateway(self, context, id): - pass - - @abc.abstractmethod - def get_network_gateways(self, context, filters=None, fields=None, - sorts=None, limit=None, marker=None, - page_reverse=False): - pass - - @abc.abstractmethod - def connect_network(self, context, network_gateway_id, - network_mapping_info): - pass - - @abc.abstractmethod - def disconnect_network(self, context, network_gateway_id, - network_mapping_info): - pass - - @abc.abstractmethod - def create_gateway_device(self, context, gateway_device): - pass - - @abc.abstractmethod - def update_gateway_device(self, context, id, gateway_device): - pass - - @abc.abstractmethod - def delete_gateway_device(self, context, id): - pass - - @abc.abstractmethod - def get_gateway_device(self, context, id, fields=None): - pass - - @abc.abstractmethod - def get_gateway_devices(self, context, filters=None, fields=None, - sorts=None, limit=None, marker=None, - page_reverse=False): - pass diff --git a/neutron/plugins/vmware/extensions/nvp_qos.py b/neutron/plugins/vmware/extensions/nvp_qos.py deleted file mode 100644 index 14d30ce9e..000000000 --- a/neutron/plugins/vmware/extensions/nvp_qos.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2013 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. -# -# TODO(arosen): This is deprecated in Juno, and -# to be removed in Kxxxx. - -from neutron.plugins.vmware.extensions import qos - - -class Nvp_qos(qos.Qos): - """(Deprecated) Port Queue extension.""" - - @classmethod - def get_name(cls): - return "nvp-qos" - - @classmethod - def get_alias(cls): - return "nvp-qos" - - @classmethod - def get_description(cls): - return "NVP QoS extension (deprecated)." diff --git a/neutron/plugins/vmware/extensions/qos.py b/neutron/plugins/vmware/extensions/qos.py deleted file mode 100644 index fe1ac6ee3..000000000 --- a/neutron/plugins/vmware/extensions/qos.py +++ /dev/null @@ -1,225 +0,0 @@ -# Copyright 2013 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. -# - -import abc - -from neutron.api import extensions -from neutron.api.v2 import attributes as attr -from neutron.api.v2 import base -from neutron.common import exceptions as nexception -from neutron import manager - - -# For policy.json/Auth -qos_queue_create = "create_qos_queue" -qos_queue_delete = "delete_qos_queue" -qos_queue_get = "get_qos_queue" -qos_queue_list = "get_qos_queues" - - -class DefaultQueueCreateNotAdmin(nexception.InUse): - message = _("Need to be admin in order to create queue called default") - - -class DefaultQueueAlreadyExists(nexception.InUse): - message = _("Default queue already exists.") - - -class QueueInvalidDscp(nexception.InvalidInput): - message = _("Invalid value for dscp %(data)s must be integer value" - " between 0 and 63.") - - -class QueueInvalidMarking(nexception.InvalidInput): - message = _("The qos marking cannot be set to 'trusted' " - "when the DSCP field is set") - - -class QueueMinGreaterMax(nexception.InvalidInput): - message = _("Invalid bandwidth rate, min greater than max.") - - -class QueueInvalidBandwidth(nexception.InvalidInput): - message = _("Invalid bandwidth rate, %(data)s must be a non negative" - " integer.") - - -class QueueNotFound(nexception.NotFound): - message = _("Queue %(id)s does not exist") - - -class QueueInUseByPort(nexception.InUse): - message = _("Unable to delete queue attached to port.") - - -class QueuePortBindingNotFound(nexception.NotFound): - message = _("Port is not associated with lqueue") - - -def convert_to_unsigned_int_or_none(val): - if val is None: - return - try: - val = int(val) - if val < 0: - raise ValueError() - except (ValueError, TypeError): - msg = _("'%s' must be a non negative integer.") % val - raise nexception.InvalidInput(error_message=msg) - return val - - -def convert_to_unsigned_int_or_none_max_63(val): - val = convert_to_unsigned_int_or_none(val) - if val > 63: - raise QueueInvalidDscp(data=val) - return val - -# As per NSX API, if a queue is trusted, DSCP must be omitted; if a queue is -# untrusted, DSCP must be specified. Whichever default values we choose for -# the tuple (qos_marking, dscp), there will be at least one combination of a -# request with conflicting values: for instance given the default values below, -# requests with qos_marking = 'trusted' and the default dscp value will fail. -# In order to avoid API users to explicitly specify a setting for clearing -# the DSCP field when a trusted queue is created, the code serving this API -# will adopt the following behaviour when qos_marking is set to 'trusted': -# - if the DSCP attribute is set to the default value (0), silently drop -# its value -# - if the DSCP attribute is set to anything than 0 (but still a valid DSCP -# value) return a 400 error as qos_marking and DSCP setting conflict. -# TODO(salv-orlando): Evaluate whether it will be possible from a backward -# compatibility perspective to change the default value for DSCP in order to -# avoid this peculiar behaviour - -RESOURCE_ATTRIBUTE_MAP = { - 'qos_queues': { - 'id': {'allow_post': False, 'allow_put': False, - 'is_visible': True}, - 'default': {'allow_post': True, 'allow_put': False, - 'convert_to': attr.convert_to_boolean, - 'is_visible': True, 'default': False}, - 'name': {'allow_post': True, 'allow_put': False, - 'validate': {'type:string': attr.NAME_MAX_LEN}, - 'is_visible': True, 'default': ''}, - 'min': {'allow_post': True, 'allow_put': False, - 'is_visible': True, 'default': '0', - 'convert_to': convert_to_unsigned_int_or_none}, - 'max': {'allow_post': True, 'allow_put': False, - 'is_visible': True, 'default': None, - 'convert_to': convert_to_unsigned_int_or_none}, - 'qos_marking': {'allow_post': True, 'allow_put': False, - 'validate': {'type:values': ['untrusted', 'trusted']}, - 'default': 'untrusted', 'is_visible': True}, - 'dscp': {'allow_post': True, 'allow_put': False, - 'is_visible': True, 'default': '0', - 'convert_to': convert_to_unsigned_int_or_none_max_63}, - 'tenant_id': {'allow_post': True, 'allow_put': False, - 'required_by_policy': True, - 'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, - 'is_visible': True}, - }, -} - - -QUEUE = 'queue_id' -RXTX_FACTOR = 'rxtx_factor' -EXTENDED_ATTRIBUTES_2_0 = { - 'ports': { - RXTX_FACTOR: {'allow_post': True, - # FIXME(arosen): the plugin currently does not - # implement updating rxtx factor on port. - 'allow_put': True, - 'is_visible': False, - 'default': 1, - 'enforce_policy': True, - 'convert_to': attr.convert_to_positive_float_or_none}, - - QUEUE: {'allow_post': False, - 'allow_put': False, - 'is_visible': True, - 'default': False, - 'enforce_policy': True}}, - 'networks': {QUEUE: {'allow_post': True, - 'allow_put': True, - 'is_visible': True, - 'default': False, - 'enforce_policy': True}} - -} - - -class Qos(extensions.ExtensionDescriptor): - """Port Queue extension.""" - - @classmethod - def get_name(cls): - return "QoS Queue" - - @classmethod - def get_alias(cls): - return "qos-queue" - - @classmethod - def get_description(cls): - return "NSX QoS extension." - - @classmethod - def get_updated(cls): - return "2014-01-01T00:00:00-00:00" - - @classmethod - def get_resources(cls): - """Returns Ext Resources.""" - exts = [] - plugin = manager.NeutronManager.get_plugin() - resource_name = 'qos_queue' - collection_name = resource_name.replace('_', '-') + "s" - params = RESOURCE_ATTRIBUTE_MAP.get(resource_name + "s", dict()) - controller = base.create_resource(collection_name, - resource_name, - plugin, params, allow_bulk=False) - - ex = extensions.ResourceExtension(collection_name, - controller) - exts.append(ex) - - return exts - - def get_extended_resources(self, version): - if version == "2.0": - return dict(EXTENDED_ATTRIBUTES_2_0.items() + - RESOURCE_ATTRIBUTE_MAP.items()) - else: - return {} - - -class QueuePluginBase(object): - @abc.abstractmethod - def create_qos_queue(self, context, queue): - pass - - @abc.abstractmethod - def delete_qos_queue(self, context, id): - pass - - @abc.abstractmethod - def get_qos_queue(self, context, id, fields=None): - pass - - @abc.abstractmethod - def get_qos_queues(self, context, filters=None, fields=None, sorts=None, - limit=None, marker=None, page_reverse=False): - pass diff --git a/neutron/plugins/vmware/extensions/routertype.py b/neutron/plugins/vmware/extensions/routertype.py deleted file mode 100644 index f42c6b902..000000000 --- a/neutron/plugins/vmware/extensions/routertype.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright 2015 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. - -from neutron.api import extensions -from neutron.api.v2 import attributes - - -ROUTER_TYPE = 'router_type' -EXTENDED_ATTRIBUTES_2_0 = { - 'routers': { - ROUTER_TYPE: {'allow_post': True, 'allow_put': False, - 'validate': {'type:values': ['shared', 'exclusive']}, - 'default': attributes.ATTR_NOT_SPECIFIED, - 'is_visible': True}, - } -} - - -class Routertype(extensions.ExtensionDescriptor): - """Extension class supporting router type.""" - - @classmethod - def get_name(cls): - return "Router Type" - - @classmethod - def get_alias(cls): - return "nsxv-router-type" - - @classmethod - def get_description(cls): - return "Enables configuration of NSXv router type." - - @classmethod - def get_updated(cls): - return "2015-1-12T10:00:00-00:00" - - def get_required_extensions(self): - return ["router"] - - @classmethod - def get_resources(cls): - """Returns Ext Resources.""" - return [] - - def get_extended_resources(self, version): - if version == "2.0": - return EXTENDED_ATTRIBUTES_2_0 - else: - return {} diff --git a/neutron/plugins/vmware/extensions/vnicindex.py b/neutron/plugins/vmware/extensions/vnicindex.py deleted file mode 100644 index 290f0a3b2..000000000 --- a/neutron/plugins/vmware/extensions/vnicindex.py +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright 2015 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. - -from neutron.api import extensions -from neutron.api.v2 import attributes - -# Attribute Map -VNIC_INDEX = 'vnic_index' - - -EXTENDED_ATTRIBUTES_2_0 = { - 'ports': { - VNIC_INDEX: - {'allow_post': True, - 'allow_put': True, - 'is_visible': True, - 'default': None, - 'convert_to': attributes.convert_to_int_if_not_none}}} - - -class Vnicindex(extensions.ExtensionDescriptor): - @classmethod - def get_name(cls): - return "VNIC Index" - - @classmethod - def get_alias(cls): - return "vnic-index" - - @classmethod - def get_description(cls): - return ("Enable a port to be associated with a VNIC index") - - @classmethod - def get_updated(cls): - return "2014-09-15T12:00:00-00:00" - - def get_extended_resources(self, version): - if version == "2.0": - return EXTENDED_ATTRIBUTES_2_0 - else: - return {} -- 2.45.2