From 75b6bf78d8cd28e7a1048047e92f1a5bcdcf2edd Mon Sep 17 00:00:00 2001 From: Dao Cong Tien Date: Thu, 9 Feb 2017 20:48:39 +0700 Subject: [PATCH] Update OSC baremetal node set/unset supporting dynamic drivers Update OSC baremetal node set and unset to support setting the hardware interfaces boot, console, deploy, inspect, management, power, raid, and vendor for a node. Change-Id: I70514b8cb5968703854e23739e0a380783df5378 Partial-Bug: #1524745 --- ironicclient/osc/v1/baremetal_node.py | 161 ++++++++++++++++++ .../tests/unit/osc/v1/test_baremetal_node.py | 82 ++++++++- ...e-baremetal-node-set-c1ac57de0d481efe.yaml | 6 + 3 files changed, 245 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/bug-1524745-update-baremetal-node-set-c1ac57de0d481efe.yaml diff --git a/ironicclient/osc/v1/baremetal_node.py b/ironicclient/osc/v1/baremetal_node.py index 14594cedd..be63142f0 100755 --- a/ironicclient/osc/v1/baremetal_node.py +++ b/ironicclient/osc/v1/baremetal_node.py @@ -945,11 +945,51 @@ class SetBaremetalNode(command.Command): metavar="", help=_("Set the driver for the node"), ) + parser.add_argument( + '--boot-interface', + metavar='', + help=_('Set the boot interface for the node'), + ) + parser.add_argument( + '--console-interface', + metavar='', + help=_('Set the console interface for the node'), + ) + parser.add_argument( + '--deploy-interface', + metavar='', + help=_('Set the deploy interface for the node'), + ) + parser.add_argument( + '--inspect-interface', + metavar='', + help=_('Set the inspect interface for the node'), + ) + parser.add_argument( + '--management-interface', + metavar='', + help=_('Set the management interface for the node'), + ) parser.add_argument( '--network-interface', metavar='', help=_('Set the network interface for the node'), ) + parser.add_argument( + '--power-interface', + metavar='', + help=_('Set the power interface for the node'), + ) + parser.add_argument( + '--raid-interface', + metavar='', + help=_('Set the RAID interface for the node'), + ) + parser.add_argument( + '--vendor-interface', + metavar='', + help=_('Set the vendor interface for the node'), + ) parser.add_argument( '--resource-class', metavar='', @@ -1027,11 +1067,51 @@ class SetBaremetalNode(command.Command): driver = ["driver=%s" % parsed_args.driver] properties.extend(utils.args_array_to_patch( 'add', driver)) + if parsed_args.boot_interface: + boot_interface = [ + "boot_interface=%s" % parsed_args.boot_interface] + properties.extend(utils.args_array_to_patch( + 'add', boot_interface)) + if parsed_args.console_interface: + console_interface = [ + "console_interface=%s" % parsed_args.console_interface] + properties.extend(utils.args_array_to_patch( + 'add', console_interface)) + if parsed_args.deploy_interface: + deploy_interface = [ + "deploy_interface=%s" % parsed_args.deploy_interface] + properties.extend(utils.args_array_to_patch( + 'add', deploy_interface)) + if parsed_args.inspect_interface: + inspect_interface = [ + "inspect_interface=%s" % parsed_args.inspect_interface] + properties.extend(utils.args_array_to_patch( + 'add', inspect_interface)) + if parsed_args.management_interface: + management_interface = [ + "management_interface=%s" % parsed_args.management_interface] + properties.extend(utils.args_array_to_patch( + 'add', management_interface)) if parsed_args.network_interface: network_interface = [ "network_interface=%s" % parsed_args.network_interface] properties.extend(utils.args_array_to_patch( 'add', network_interface)) + if parsed_args.power_interface: + power_interface = [ + "power_interface=%s" % parsed_args.power_interface] + properties.extend(utils.args_array_to_patch( + 'add', power_interface)) + if parsed_args.raid_interface: + raid_interface = [ + "raid_interface=%s" % parsed_args.raid_interface] + properties.extend(utils.args_array_to_patch( + 'add', raid_interface)) + if parsed_args.vendor_interface: + vendor_interface = [ + "vendor_interface=%s" % parsed_args.vendor_interface] + properties.extend(utils.args_array_to_patch( + 'add', vendor_interface)) if parsed_args.resource_class: resource_class = [ "resource_class=%s" % parsed_args.resource_class] @@ -1208,6 +1288,60 @@ class UnsetBaremetalNode(command.Command): action='store_true', help=_('Unset chassis UUID on this baremetal node'), ) + parser.add_argument( + "--boot-interface", + dest='boot_interface', + action='store_true', + help=_('Unset boot interface on this baremetal node'), + ) + parser.add_argument( + "--console-interface", + dest='console_interface', + action='store_true', + help=_('Unset console interface on this baremetal node'), + ) + parser.add_argument( + "--deploy-interface", + dest='deploy_interface', + action='store_true', + help=_('Unset deploy interface on this baremetal node'), + ) + parser.add_argument( + "--inspect-interface", + dest='inspect_interface', + action='store_true', + help=_('Unset inspect interface on this baremetal node'), + ) + parser.add_argument( + "--management-interface", + dest='management_interface', + action='store_true', + help=_('Unset management interface on this baremetal node'), + ) + parser.add_argument( + "--network-interface", + dest='network_interface', + action='store_true', + help=_('Unset network interface on this baremetal node'), + ) + parser.add_argument( + "--power-interface", + dest='power_interface', + action='store_true', + help=_('Unset power interface on this baremetal node'), + ) + parser.add_argument( + "--raid-interface", + dest='raid_interface', + action='store_true', + help=_('Unset RAID interface on this baremetal node'), + ) + parser.add_argument( + "--vendor-interface", + dest='vendor_interface', + action='store_true', + help=_('Unset vendor interface on this baremetal node'), + ) return parser @@ -1250,6 +1384,33 @@ class UnsetBaremetalNode(command.Command): if parsed_args.chassis_uuid: properties.extend(utils.args_array_to_patch('remove', ['chassis_uuid'])) + if parsed_args.boot_interface: + properties.extend(utils.args_array_to_patch('remove', + ['boot_interface'])) + if parsed_args.console_interface: + properties.extend(utils.args_array_to_patch('remove', + ['console_interface'])) + if parsed_args.deploy_interface: + properties.extend(utils.args_array_to_patch('remove', + ['deploy_interface'])) + if parsed_args.inspect_interface: + properties.extend(utils.args_array_to_patch('remove', + ['inspect_interface'])) + if parsed_args.management_interface: + properties.extend(utils.args_array_to_patch('remove', + ['management_interface'])) + if parsed_args.network_interface: + properties.extend(utils.args_array_to_patch('remove', + ['network_interface'])) + if parsed_args.power_interface: + properties.extend(utils.args_array_to_patch('remove', + ['power_interface'])) + if parsed_args.raid_interface: + properties.extend(utils.args_array_to_patch('remove', + ['raid_interface'])) + if parsed_args.vendor_interface: + properties.extend(utils.args_array_to_patch('remove', + ['vendor_interface'])) if properties: baremetal_client.node.update(parsed_args.node, properties) else: diff --git a/ironicclient/tests/unit/osc/v1/test_baremetal_node.py b/ironicclient/tests/unit/osc/v1/test_baremetal_node.py index 253086c92..d41ecd1c3 100644 --- a/ironicclient/tests/unit/osc/v1/test_baremetal_node.py +++ b/ironicclient/tests/unit/osc/v1/test_baremetal_node.py @@ -1801,14 +1801,14 @@ class TestBaremetalSet(TestBaremetal): [{'path': '/driver', 'value': 'xxxxx', 'op': 'add'}] ) - def test_baremetal_set_network_interface(self): + def _test_baremetal_set_hardware_interface(self, interface): arglist = [ 'node_uuid', - '--network-interface', 'xxxxx', + '--%s-interface' % interface, 'xxxxx', ] verifylist = [ ('node', 'node_uuid'), - ('network_interface', 'xxxxx') + ('%s_interface' % interface, 'xxxxx') ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -1817,9 +1817,37 @@ class TestBaremetalSet(TestBaremetal): self.baremetal_mock.node.update.assert_called_once_with( 'node_uuid', - [{'path': '/network_interface', 'value': 'xxxxx', 'op': 'add'}] + [{'path': '/%s_interface' % interface, + 'value': 'xxxxx', 'op': 'add'}] ) + def test_baremetal_set_boot_interface(self): + self._test_baremetal_set_hardware_interface('boot') + + def test_baremetal_set_console_interface(self): + self._test_baremetal_set_hardware_interface('console') + + def test_baremetal_set_deploy_interface(self): + self._test_baremetal_set_hardware_interface('deploy') + + def test_baremetal_set_inspect_interface(self): + self._test_baremetal_set_hardware_interface('inspect') + + def test_baremetal_set_management_interface(self): + self._test_baremetal_set_hardware_interface('management') + + def test_baremetal_set_network_interface(self): + self._test_baremetal_set_hardware_interface('network') + + def test_baremetal_set_power_interface(self): + self._test_baremetal_set_hardware_interface('power') + + def test_baremetal_set_raid_interface(self): + self._test_baremetal_set_hardware_interface('raid') + + def test_baremetal_set_vendor_interface(self): + self._test_baremetal_set_hardware_interface('vendor') + def test_baremetal_set_resource_class(self): arglist = [ 'node_uuid', @@ -2377,6 +2405,52 @@ class TestBaremetalUnset(TestBaremetal): [{'path': '/chassis_uuid', 'op': 'remove'}] ) + def _test_baremetal_unset_hw_interface(self, interface): + arglist = [ + 'node_uuid', + '--%s-interface' % interface, + ] + verifylist = [ + ('node', 'node_uuid'), + ('%s_interface' % interface, True) + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.cmd.take_action(parsed_args) + + self.baremetal_mock.node.update.assert_called_once_with( + 'node_uuid', + [{'path': '/%s_interface' % interface, 'op': 'remove'}] + ) + + def test_baremetal_unset_boot_interface(self): + self._test_baremetal_unset_hw_interface('boot') + + def test_baremetal_unset_console_interface(self): + self._test_baremetal_unset_hw_interface('console') + + def test_baremetal_unset_deploy_interface(self): + self._test_baremetal_unset_hw_interface('deploy') + + def test_baremetal_unset_inspect_interface(self): + self._test_baremetal_unset_hw_interface('inspect') + + def test_baremetal_unset_management_interface(self): + self._test_baremetal_unset_hw_interface('management') + + def test_baremetal_unset_network_interface(self): + self._test_baremetal_unset_hw_interface('network') + + def test_baremetal_unset_power_interface(self): + self._test_baremetal_unset_hw_interface('power') + + def test_baremetal_unset_raid_interface(self): + self._test_baremetal_unset_hw_interface('raid') + + def test_baremetal_unset_vendor_interface(self): + self._test_baremetal_unset_hw_interface('vendor') + class TestValidate(TestBaremetal): def setUp(self): diff --git a/releasenotes/notes/bug-1524745-update-baremetal-node-set-c1ac57de0d481efe.yaml b/releasenotes/notes/bug-1524745-update-baremetal-node-set-c1ac57de0d481efe.yaml new file mode 100644 index 000000000..1cb14dd8c --- /dev/null +++ b/releasenotes/notes/bug-1524745-update-baremetal-node-set-c1ac57de0d481efe.yaml @@ -0,0 +1,6 @@ +--- +features: + - Adds new arguments to the OSC baremetal-node-set to allow setting + boot, console, deploy, inspect, management, power, raid, and vendor + hardware interfaces. They are available starting with ironic API + microversion 1.30. \ No newline at end of file