diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index a6a5908440..67b4140a4e 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -1517,6 +1517,13 @@ class RebuildServer(command.ShowOne): metavar='', help=_("Set the password on the rebuilt instance"), ) + parser.add_argument( + '--property', + metavar='', + action=parseractions.KeyValueAction, + help=_('Set a property on the rebuilt instance ' + '(repeat option to set multiple values)'), + ) parser.add_argument( '--wait', action='store_true', @@ -1542,7 +1549,11 @@ class RebuildServer(command.ShowOne): 'image', {}).get('id') image = utils.find_resource(image_client.images, image_id) - server = server.rebuild(image, parsed_args.password) + kwargs = {} + if parsed_args.property: + kwargs['meta'] = parsed_args.property + + server = server.rebuild(image, parsed_args.password, **kwargs) if parsed_args.wait: if utils.wait_for_status( compute_client.servers.get, diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py index b3d326819b..e938564b50 100644 --- a/openstackclient/tests/unit/compute/v2/test_server.py +++ b/openstackclient/tests/unit/compute/v2/test_server.py @@ -2496,6 +2496,27 @@ class TestServerRebuild(TestServer): self.images_mock.get.assert_called_with(self.image.id) self.server.rebuild.assert_called_with(self.image, None) + def test_rebuild_with_property(self): + arglist = [ + self.server.id, + '--property', 'key1=value1', + '--property', 'key2=value2' + ] + expected_property = {'key1': 'value1', 'key2': 'value2'} + verifylist = [ + ('server', self.server.id), + ('property', expected_property) + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # Get the command object to test + self.cmd.take_action(parsed_args) + + self.servers_mock.get.assert_called_with(self.server.id) + self.images_mock.get.assert_called_with(self.image.id) + self.server.rebuild.assert_called_with( + self.image, None, meta=expected_property) + class TestServerRemoveFixedIP(TestServer): diff --git a/releasenotes/notes/server-rebuild-property-e8c6439b04e27c80.yaml b/releasenotes/notes/server-rebuild-property-e8c6439b04e27c80.yaml new file mode 100644 index 0000000000..3bdf5060e9 --- /dev/null +++ b/releasenotes/notes/server-rebuild-property-e8c6439b04e27c80.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Add ``--property`` option to the ``server rebuild`` command, to provide + the ability to specify properties of the rebuilt instance. + [Story `2003979 `_]