From 07290220762e023f1e197a7d854228d4d09fce7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20Gagne=CC=81?= Date: Thu, 2 Nov 2017 16:45:52 -0400 Subject: Add ability to provide configdrive when rebuilding with OSC Ironic introduces the API microversion 1.35 which allows configdrive to be provided when setting the node's provisioning state to "rebuild". This change adds the ability to provide a config-drive when rebuilding a node. Closes-bug: #1575935 Change-Id: I950ac35bcde97b0f93225f80f989d42c5519faf2 --- ironicclient/osc/plugin.py | 2 +- ironicclient/osc/v1/baremetal_node.py | 21 +++++++++++++++++---- .../tests/unit/osc/v1/test_baremetal_node.py | 21 +++++++++++++++++++++ ...c-node-rebuild-configdrive-8979d5b1373e8d5f.yaml | 7 +++++++ 4 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 releasenotes/notes/osc-node-rebuild-configdrive-8979d5b1373e8d5f.yaml diff --git a/ironicclient/osc/plugin.py b/ironicclient/osc/plugin.py index 5723672..4f604e0 100644 --- a/ironicclient/osc/plugin.py +++ b/ironicclient/osc/plugin.py @@ -26,7 +26,7 @@ LOG = logging.getLogger(__name__) CLIENT_CLASS = 'ironicclient.v1.client.Client' API_VERSION_OPTION = 'os_baremetal_api_version' API_NAME = 'baremetal' -LAST_KNOWN_API_VERSION = 34 +LAST_KNOWN_API_VERSION = 35 LATEST_VERSION = "1.{}".format(LAST_KNOWN_API_VERSION) API_VERSIONS = { '1.%d' % i: CLIENT_CLASS diff --git a/ironicclient/osc/v1/baremetal_node.py b/ironicclient/osc/v1/baremetal_node.py index b3b5d38..1e558f0 100755 --- a/ironicclient/osc/v1/baremetal_node.py +++ b/ironicclient/osc/v1/baremetal_node.py @@ -27,6 +27,12 @@ from ironicclient import exc from ironicclient.v1 import resource_fields as res_fields from ironicclient.v1 import utils as v1_utils +CONFIG_DRIVE_ARG_HELP = _( + "A gzipped, base64-encoded configuration drive string OR " + "the path to the configuration drive file OR the path to a " + "directory containing the config drive files. In case it's " + "a directory, a config drive will be generated from it.") + class ProvisionStateBaremetalNode(command.Command): """Base provision state class""" @@ -483,10 +489,7 @@ class DeployBaremetalNode(ProvisionStateWithWait): '--config-drive', metavar='', default=None, - help=_("A gzipped, base64-encoded configuration drive string OR " - "the path to the configuration drive file OR the path to a " - "directory containing the config drive files. In case it's " - "a directory, a config drive will be generated from it. ")) + help=CONFIG_DRIVE_ARG_HELP) return parser @@ -898,6 +901,16 @@ class RebuildBaremetalNode(ProvisionStateWithWait): log = logging.getLogger(__name__ + ".RebuildBaremetalNode") PROVISION_STATE = 'rebuild' + def get_parser(self, prog_name): + parser = super(RebuildBaremetalNode, self).get_parser(prog_name) + + parser.add_argument( + '--config-drive', + metavar='', + default=None, + help=CONFIG_DRIVE_ARG_HELP) + return parser + class SetBaremetalNode(command.Command): """Set baremetal properties""" diff --git a/ironicclient/tests/unit/osc/v1/test_baremetal_node.py b/ironicclient/tests/unit/osc/v1/test_baremetal_node.py index 33fcac6..a14f7ea 100644 --- a/ironicclient/tests/unit/osc/v1/test_baremetal_node.py +++ b/ironicclient/tests/unit/osc/v1/test_baremetal_node.py @@ -1489,6 +1489,23 @@ class TestRebuildBaremetalProvisionState(TestBaremetal): # Get the command object to test self.cmd = baremetal_node.RebuildBaremetalNode(self.app, None) + def test_rebuild_baremetal_provision_state_active_and_configdrive(self): + arglist = ['node_uuid', + '--config-drive', 'path/to/drive'] + verifylist = [ + ('node', 'node_uuid'), + ('provision_state', 'rebuild'), + ('config_drive', 'path/to/drive'), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.cmd.take_action(parsed_args) + + self.baremetal_mock.node.set_provision_state.assert_called_once_with( + 'node_uuid', 'rebuild', + cleansteps=None, configdrive='path/to/drive') + def test_rebuild_no_wait(self): arglist = ['node_uuid'] verifylist = [ @@ -1500,6 +1517,10 @@ class TestRebuildBaremetalProvisionState(TestBaremetal): self.cmd.take_action(parsed_args) + self.baremetal_mock.node.set_provision_state.assert_called_once_with( + 'node_uuid', 'rebuild', + cleansteps=None, configdrive=None) + self.baremetal_mock.node.wait_for_provision_state.assert_not_called() def test_rebuild_baremetal_provision_state_active_and_wait(self): diff --git a/releasenotes/notes/osc-node-rebuild-configdrive-8979d5b1373e8d5f.yaml b/releasenotes/notes/osc-node-rebuild-configdrive-8979d5b1373e8d5f.yaml new file mode 100644 index 0000000..db4e525 --- /dev/null +++ b/releasenotes/notes/osc-node-rebuild-configdrive-8979d5b1373e8d5f.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Adds the ability to specify a configuration drive when + rebuilding a node, via the ``--config-drive`` option to the + ``openstack baremetal node rebuild`` command. This is available starting + with ironic API version 1.35. -- cgit v1.2.1