From 220f8b4b77fa1c0c38b4dc758acf2389792f54eb Mon Sep 17 00:00:00 2001 From: Andriy Popovych Date: Wed, 14 Dec 2016 14:54:49 +0200 Subject: [PATCH] Use dict_merge instead of update During fetching NIC and Bonds attributes attributes have been rewritten insted of extending. Change-Id: I542b601fc1cc154eccaa6fba1a0442a19b7b3353 Closes-Bug: #1644563 --- .../tests/test_node_nic_handler.py | 2 +- .../tests/test_node_nic_handlers_w_bonding.py | 23 +++++-------------- nailgun/nailgun/objects/plugin.py | 11 +++++++-- nailgun/nailgun/plugins/manager.py | 16 +++++-------- nailgun/nailgun/test/base.py | 6 +++++ .../nailgun/test/unit/test_object_plugin.py | 23 +++++++++++++------ 6 files changed, 44 insertions(+), 37 deletions(-) diff --git a/nailgun/nailgun/extensions/network_manager/tests/test_node_nic_handler.py b/nailgun/nailgun/extensions/network_manager/tests/test_node_nic_handler.py index 9f0d20fc56..a0bed7c8e8 100644 --- a/nailgun/nailgun/extensions/network_manager/tests/test_node_nic_handler.py +++ b/nailgun/nailgun/extensions/network_manager/tests/test_node_nic_handler.py @@ -1313,7 +1313,7 @@ class TestNICAttributesHandlers(BaseIntegrationTest): 'description': 'Some description' }, 'metadata': { - 'label': 'Test plugin', + 'label': 'Test base plugin', 'class': 'plugin' } } diff --git a/nailgun/nailgun/extensions/network_manager/tests/test_node_nic_handlers_w_bonding.py b/nailgun/nailgun/extensions/network_manager/tests/test_node_nic_handlers_w_bonding.py index 2b61ebaf0a..9e15df8fe3 100644 --- a/nailgun/nailgun/extensions/network_manager/tests/test_node_nic_handlers_w_bonding.py +++ b/nailgun/nailgun/extensions/network_manager/tests/test_node_nic_handlers_w_bonding.py @@ -966,26 +966,15 @@ class TestBondAttributesDefaultsHandler(BaseIntegrationTest): } }, 'plugin_a_with_bond_attributes': { - 'plugin_name_text': { - 'weight': 25, - 'type': 'text', - 'value': 'value', - 'label': 'label', + 'metadata': { + 'label': 'Test base plugin' }, - 'value': { - 'weight': 10, - 'type': 'number', - 'value': None, - 'label': 'MTU' - } - }, - 'plugin_a_with_bond_attributes': { 'plugin_name_text': { - 'weight': 25, - 'type': 'text', 'value': 'value', - 'label': 'label', - 'description': 'Some description' + 'type': 'text', + 'description': 'Some description', + 'weight': 25, + 'label': 'label' } } } diff --git a/nailgun/nailgun/objects/plugin.py b/nailgun/nailgun/objects/plugin.py index 4b47870e67..cd3582c541 100644 --- a/nailgun/nailgun/objects/plugin.py +++ b/nailgun/nailgun/objects/plugin.py @@ -29,6 +29,7 @@ from nailgun.objects import NailgunCollection from nailgun.objects import NailgunObject from nailgun.objects.serializers.plugin import PluginSerializer from nailgun import plugins +from nailgun import utils as nailgun_utils class Plugin(NailgunObject): @@ -556,7 +557,10 @@ class NodeNICInterfaceClusterPlugin(BasicNodeClusterPlugin): } # TODO(apopovych): resolve conflicts of same attribute names # for different plugins - nic_attributes[name].update(attributes) + nic_attributes[name] = nailgun_utils.dict_merge( + nic_attributes[name], + attributes + ) return nic_attributes @@ -648,7 +652,10 @@ class NodeBondInterfaceClusterPlugin(BasicNodeClusterPlugin): } # TODO(apopovych): resolve conflicts of same attribute names # for different plugins - bond_attributes[name].update(attributes) + bond_attributes[name] = nailgun_utils.dict_merge( + bond_attributes[name], + attributes + ) return bond_attributes diff --git a/nailgun/nailgun/plugins/manager.py b/nailgun/nailgun/plugins/manager.py index 77544ec7ff..be9f21089f 100644 --- a/nailgun/nailgun/plugins/manager.py +++ b/nailgun/nailgun/plugins/manager.py @@ -548,12 +548,10 @@ class PluginManager(object): plugins.append(attributes.pop(k)) for plugin in plugins: - metadata = plugin.pop('metadata') + metadata = plugin.get('metadata', {}) + bond_plugin_id = metadata.pop('bond_plugin_id') NodeBondInterfaceClusterPlugin.\ - set_attributes( - metadata['bond_plugin_id'], - plugin - ) + set_attributes(bond_plugin_id, plugin) @classmethod def get_nic_default_attributes(cls, cluster): @@ -591,12 +589,10 @@ class PluginManager(object): plugins.append(attributes.pop(k)) for plugin in plugins: - metadata = plugin.pop('metadata') + metadata = plugin.get('metadata', {}) + nic_plugin_id = metadata.pop('nic_plugin_id') NodeNICInterfaceClusterPlugin.\ - set_attributes( - metadata['nic_plugin_id'], - plugin - ) + set_attributes(nic_plugin_id, plugin) @classmethod def add_plugin_attributes_for_interface(cls, interface): diff --git a/nailgun/nailgun/test/base.py b/nailgun/nailgun/test/base.py index 3ad16dc837..1f5a78622b 100644 --- a/nailgun/nailgun/test/base.py +++ b/nailgun/nailgun/test/base.py @@ -864,6 +864,9 @@ class EnvironmentManager(object): def get_default_plugin_nic_config(self, **kwargs): nic_attributes = { + 'metadata': { + 'label': 'Test base plugin' + }, 'plugin_name_text': { 'value': 'value', 'type': 'text', @@ -878,6 +881,9 @@ class EnvironmentManager(object): def get_default_plugin_bond_config(self, **kwargs): bond_attributes = { + 'metadata': { + 'label': 'Test base plugin' + }, 'plugin_name_text': { 'value': 'value', 'type': 'text', diff --git a/nailgun/nailgun/test/unit/test_object_plugin.py b/nailgun/nailgun/test/unit/test_object_plugin.py index 75d8bf60e2..86cf6a24b4 100644 --- a/nailgun/nailgun/test/unit/test_object_plugin.py +++ b/nailgun/nailgun/test/unit/test_object_plugin.py @@ -371,10 +371,15 @@ class TestNodeNICInterfaceClusterPlugin(ExtraFunctions): expected_attributes = { 'plugin_a_with_nic_attributes': { 'metadata': { - 'label': 'Test plugin', + 'label': 'Test base plugin', 'nic_plugin_id': nic_plugin_id, - 'class': 'plugin'}}} - expected_attributes['plugin_a_with_nic_attributes'].update(nic_config) + 'class': 'plugin'}, + 'plugin_name_text': { + 'value': 'value', + 'type': 'text', + 'description': 'Some description', + 'weight': 25, + 'label': 'label'}}} self.assertEqual(expected_attributes, attributes) @@ -509,11 +514,15 @@ class TestNodeBondInterfaceClusterPlugin(ExtraFunctions): expected_attributes = { 'plugin_a_with_bond_attributes': { 'metadata': { - 'label': 'Test plugin', + 'label': 'Test base plugin', 'bond_plugin_id': bond_plugin_id, - 'class': 'plugin'}}} - expected_attributes['plugin_a_with_bond_attributes'].update( - plugin_bond_config) + 'class': 'plugin'}, + 'plugin_name_text': { + 'value': 'value', + 'type': 'text', + 'description': 'Some description', + 'weight': 25, + 'label': 'label'}}} self.assertEqual(expected_attributes, attributes)