diff --git a/ironic/drivers/modules/ilo/inspect.py b/ironic/drivers/modules/ilo/inspect.py index 0df53b26dd..a81fb91443 100644 --- a/ironic/drivers/modules/ilo/inspect.py +++ b/ironic/drivers/modules/ilo/inspect.py @@ -155,6 +155,9 @@ def _update_capabilities(node, new_capabilities): :returns: The capability string after adding/updating the node_capabilities with new_capabilities :raises: InvalidParameterValue, if node_capabilities is malformed. + :raises: HardwareInspectionFailure, if inspected capabilities + are not in dictionary format. + """ cap_dict = {} node_capabilities = node.properties.get('capabilities') @@ -171,12 +174,12 @@ def _update_capabilities(node, new_capabilities): "properties['capabilities'] string") % {'node': node.uuid, 'capabilities': node_capabilities}) raise exception.InvalidParameterValue(msg) - if new_capabilities and isinstance(new_capabilities, dict): + if isinstance(new_capabilities, dict): cap_dict.update(new_capabilities) else: msg = (_("The expected format of capabilities from inspection " "is dictionary while node %(node)s returned " - "%(capabilities)s."), {'node': node.uuid, + "%(capabilities)s.") % {'node': node.uuid, 'capabilities': new_capabilities}) raise exception.HardwareInspectionFailure(error=msg) return ','.join(['%(key)s:%(value)s' % {'key': key, 'value': value} @@ -229,7 +232,6 @@ def _get_macs_for_desired_ports(node, macs): to_be_created_macs = macs else: to_be_created_macs = {} - # desired_macs_list = desired_macs.split(',') # The list should look like ['Port 1', 'Port 2'] as # iLO returns port numbers like this. desired_macs_list = [ diff --git a/ironic/tests/drivers/ilo/test_inspect.py b/ironic/tests/drivers/ilo/test_inspect.py index 505f0f1437..129f52b0fc 100644 --- a/ironic/tests/drivers/ilo/test_inspect.py +++ b/ironic/tests/drivers/ilo/test_inspect.py @@ -483,7 +483,9 @@ class TestInspectPrivateMethods(db_base.DbTestCase): cap_string = 'ilo_firmware_version:xyz,foo:bar,somekey:value' cap_returned = ilo_inspect._update_capabilities(self.node, capabilities) - self.assertEqual(sorted(cap_string), sorted(cap_returned)) + set1 = set(cap_string.split(',')) + set2 = set(cap_returned.split(',')) + self.assertEqual(set1, set2) self.assertIsInstance(cap_returned, str) def test__update_capabilities_invalid_capabilities(self): @@ -498,6 +500,30 @@ class TestInspectPrivateMethods(db_base.DbTestCase): ilo_inspect._update_capabilities, self.node, capabilities) + def test__update_capabilities_add_to_existing_capabilities(self): + node_capabilities = {'capabilities': 'foo:bar'} + self.node.properties.update(node_capabilities) + new_capabilities = {'BootMode': 'uefi'} + expected_capabilities = 'BootMode:uefi,foo:bar' + cap_returned = ilo_inspect._update_capabilities(self.node, + new_capabilities) + set1 = set(expected_capabilities.split(',')) + set2 = set(cap_returned.split(',')) + self.assertEqual(set1, set2) + self.assertIsInstance(cap_returned, str) + + def test__update_capabilities_replace_to_existing_capabilities(self): + node_capabilities = {'capabilities': 'BootMode:uefi'} + self.node.properties.update(node_capabilities) + new_capabilities = {'BootMode': 'bios'} + expected_capabilities = 'BootMode:bios' + cap_returned = ilo_inspect._update_capabilities(self.node, + new_capabilities) + set1 = set(expected_capabilities.split(',')) + set2 = set(cap_returned.split(',')) + self.assertEqual(set1, set2) + self.assertIsInstance(cap_returned, str) + def test__get_macs_for_desired_ports(self): driver_info_mock = {'inspect_ports': '1,2'} self.node.driver_info = driver_info_mock