From 26425cbf5f10045ec288a63e048c7677edba4002 Mon Sep 17 00:00:00 2001 From: Aaron Rosen Date: Wed, 19 Jun 2013 13:46:06 -0700 Subject: [PATCH] Remove duplicate _check_provider_update from plugins This patch removes the duplicated method _check_provider_update and adds a check for it in the NVP plugin that was missing so that an error is raised if someone tries to update a provider network. Fixes bug: 1192702 Change-Id: I84e6767f351122f9e5af0cd4ef24d8eaaeb4ccd5 --- quantum/extensions/providernet.py | 14 ++++++++++++++ .../plugins/hyperv/hyperv_quantum_plugin.py | 19 +------------------ .../plugins/linuxbridge/lb_quantum_plugin.py | 18 +----------------- quantum/plugins/ml2/plugin.py | 12 ++---------- quantum/plugins/mlnx/mlnx_plugin.py | 17 +---------------- quantum/plugins/nicira/QuantumPlugin.py | 1 + .../plugins/openvswitch/ovs_quantum_plugin.py | 18 +----------------- 7 files changed, 21 insertions(+), 78 deletions(-) diff --git a/quantum/extensions/providernet.py b/quantum/extensions/providernet.py index ae150f220..ed837ba49 100644 --- a/quantum/extensions/providernet.py +++ b/quantum/extensions/providernet.py @@ -17,6 +17,8 @@ from quantum.api import extensions from quantum.api.v2 import attributes +from quantum.common import exceptions as q_exc + NETWORK_TYPE = 'provider:network_type' PHYSICAL_NETWORK = 'provider:physical_network' @@ -43,6 +45,18 @@ EXTENDED_ATTRIBUTES_2_0 = { } +def _raise_if_updates_provider_attributes(attrs): + """Raise exception if provider attributes are present. + + This method is used for plugins that do not support + updating provider networks. + """ + immutable = (NETWORK_TYPE, PHYSICAL_NETWORK, SEGMENTATION_ID) + if any(attributes.is_attr_set(attrs.get(a)) for a in immutable): + msg = _("plugin does not support updating provider attributes") + raise q_exc.InvalidInput(error_message=msg) + + class Providernet(extensions.ExtensionDescriptor): """Extension class supporting provider networks. diff --git a/quantum/plugins/hyperv/hyperv_quantum_plugin.py b/quantum/plugins/hyperv/hyperv_quantum_plugin.py index 1ac84ae61..ab7459396 100644 --- a/quantum/plugins/hyperv/hyperv_quantum_plugin.py +++ b/quantum/plugins/hyperv/hyperv_quantum_plugin.py @@ -253,25 +253,8 @@ class HyperVQuantumPlugin(db_base_plugin_v2.QuantumDbPluginV2, p = self._network_providers_map[binding.network_type] p.extend_network_dict(network, binding) - def _check_provider_update(self, context, attrs): - network_type = attrs.get(provider.NETWORK_TYPE) - physical_network = attrs.get(provider.PHYSICAL_NETWORK) - segmentation_id = attrs.get(provider.SEGMENTATION_ID) - - network_type_set = attributes.is_attr_set(network_type) - physical_network_set = attributes.is_attr_set(physical_network) - segmentation_id_set = attributes.is_attr_set(segmentation_id) - - if not (network_type_set or physical_network_set or - segmentation_id_set): - return - - msg = _("plugin does not support updating provider attributes") - raise q_exc.InvalidInput(error_message=msg) - def update_network(self, context, id, network): - network_attrs = network['network'] - self._check_provider_update(context, network_attrs) + provider._raise_if_updates_provider_attributes(network['network']) session = context.session with session.begin(subtransactions=True): diff --git a/quantum/plugins/linuxbridge/lb_quantum_plugin.py b/quantum/plugins/linuxbridge/lb_quantum_plugin.py index 28df04e59..f7a4310dc 100644 --- a/quantum/plugins/linuxbridge/lb_quantum_plugin.py +++ b/quantum/plugins/linuxbridge/lb_quantum_plugin.py @@ -358,22 +358,6 @@ class LinuxBridgePluginV2(db_base_plugin_v2.QuantumDbPluginV2, return (network_type, physical_network, segmentation_id) - def _check_provider_update(self, context, attrs): - network_type = attrs.get(provider.NETWORK_TYPE) - physical_network = attrs.get(provider.PHYSICAL_NETWORK) - segmentation_id = attrs.get(provider.SEGMENTATION_ID) - - network_type_set = attributes.is_attr_set(network_type) - physical_network_set = attributes.is_attr_set(physical_network) - segmentation_id_set = attributes.is_attr_set(segmentation_id) - - if not (network_type_set or physical_network_set or - segmentation_id_set): - return - - msg = _("Plugin does not support updating provider attributes") - raise q_exc.InvalidInput(error_message=msg) - def create_network(self, context, network): (network_type, physical_network, vlan_id) = self._process_provider_create(context, @@ -412,7 +396,7 @@ class LinuxBridgePluginV2(db_base_plugin_v2.QuantumDbPluginV2, return net def update_network(self, context, id, network): - self._check_provider_update(context, network['network']) + provider._raise_if_updates_provider_attributes(network['network']) session = context.session with session.begin(subtransactions=True): diff --git a/quantum/plugins/ml2/plugin.py b/quantum/plugins/ml2/plugin.py index ed378e79f..55f4cff4c 100644 --- a/quantum/plugins/ml2/plugin.py +++ b/quantum/plugins/ml2/plugin.py @@ -134,13 +134,6 @@ class Ml2Plugin(db_base_plugin_v2.QuantumDbPluginV2, value = None return value - def _check_provider_update(self, context, attrs): - if (attributes.is_attr_set(attrs.get(provider.NETWORK_TYPE)) or - attributes.is_attr_set(attrs.get(provider.PHYSICAL_NETWORK)) or - attributes.is_attr_set(attrs.get(provider.SEGMENTATION_ID))): - msg = _("Plugin does not support updating provider attributes") - raise exc.InvalidInput(error_message=msg) - def _extend_network_dict_provider(self, context, network): id = network['id'] segments = db.get_network_segments(context.session, id) @@ -213,14 +206,13 @@ class Ml2Plugin(db_base_plugin_v2.QuantumDbPluginV2, return result def update_network(self, context, id, network): - attrs = network['network'] - self._check_provider_update(context, attrs) + provider._raise_if_updates_provider_attributes(network['network']) session = context.session with session.begin(subtransactions=True): result = super(Ml2Plugin, self).update_network(context, id, network) - self._process_l3_update(context, attrs, id) + self._process_l3_update(context, network['network'], id) self._extend_network_dict_provider(context, result) self._extend_network_dict_l3(context, result) diff --git a/quantum/plugins/mlnx/mlnx_plugin.py b/quantum/plugins/mlnx/mlnx_plugin.py index ace16bdfe..3743da2d9 100644 --- a/quantum/plugins/mlnx/mlnx_plugin.py +++ b/quantum/plugins/mlnx/mlnx_plugin.py @@ -219,21 +219,6 @@ class MellanoxEswitchPlugin(db_base_plugin_v2.QuantumDbPluginV2, raise q_exc.InvalidInput(error_message=msg) return physical_network - def _check_provider_update(self, context, attrs): - network_type = attrs.get(provider.NETWORK_TYPE) - physical_network = attrs.get(provider.PHYSICAL_NETWORK) - segmentation_id = attrs.get(provider.SEGMENTATION_ID) - - network_type_set = attributes.is_attr_set(network_type) - physical_network_set = attributes.is_attr_set(physical_network) - segmentation_id_set = attributes.is_attr_set(segmentation_id) - - if not (network_type_set or physical_network_set or - segmentation_id_set): - return - msg = _("Plugin does not support updating provider attributes") - raise q_exc.InvalidInput(error_message=msg) - def _process_port_binding_create(self, context, attrs): binding_profile = attrs.get(portbindings.PROFILE) binding_profile_set = attributes.is_attr_set(binding_profile) @@ -288,7 +273,7 @@ class MellanoxEswitchPlugin(db_base_plugin_v2.QuantumDbPluginV2, return net def update_network(self, context, net_id, network): - self._check_provider_update(context, network['network']) + provider._raise_if_updates_provider_attributes(network['network']) session = context.session with session.begin(subtransactions=True): net = super(MellanoxEswitchPlugin, self).update_network(context, diff --git a/quantum/plugins/nicira/QuantumPlugin.py b/quantum/plugins/nicira/QuantumPlugin.py index 5fbea4b4b..39ca9f365 100644 --- a/quantum/plugins/nicira/QuantumPlugin.py +++ b/quantum/plugins/nicira/QuantumPlugin.py @@ -1035,6 +1035,7 @@ class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2, return quantum_lswitches def update_network(self, context, id, network): + pnet._raise_if_updates_provider_attributes(network['network']) if network["network"].get("admin_state_up"): if network['network']["admin_state_up"] is False: raise q_exc.NotImplementedError(_("admin_state_up=False " diff --git a/quantum/plugins/openvswitch/ovs_quantum_plugin.py b/quantum/plugins/openvswitch/ovs_quantum_plugin.py index 1f45b0a24..d5b0a4c26 100644 --- a/quantum/plugins/openvswitch/ovs_quantum_plugin.py +++ b/quantum/plugins/openvswitch/ovs_quantum_plugin.py @@ -420,22 +420,6 @@ class OVSQuantumPluginV2(db_base_plugin_v2.QuantumDbPluginV2, return (network_type, physical_network, segmentation_id) - def _check_provider_update(self, context, attrs): - network_type = attrs.get(provider.NETWORK_TYPE) - physical_network = attrs.get(provider.PHYSICAL_NETWORK) - segmentation_id = attrs.get(provider.SEGMENTATION_ID) - - network_type_set = attributes.is_attr_set(network_type) - physical_network_set = attributes.is_attr_set(physical_network) - segmentation_id_set = attributes.is_attr_set(segmentation_id) - - if not (network_type_set or physical_network_set or - segmentation_id_set): - return - - msg = _("Plugin does not support updating provider attributes") - raise q_exc.InvalidInput(error_message=msg) - def create_network(self, context, network): (network_type, physical_network, segmentation_id) = self._process_provider_create(context, @@ -480,7 +464,7 @@ class OVSQuantumPluginV2(db_base_plugin_v2.QuantumDbPluginV2, return net def update_network(self, context, id, network): - self._check_provider_update(context, network['network']) + provider._raise_if_updates_provider_attributes(network['network']) session = context.session with session.begin(subtransactions=True): -- 2.45.2