summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorZuul <zuul@review.openstack.org>2018-11-02 19:41:24 +0000
committerGerrit Code Review <review@openstack.org>2018-11-02 19:41:24 +0000
commit1894a3cb17ce561a2109ced7e6969a49cf3a0064 (patch)
tree9aba1053e5df0169f833f13922eff70dff491458 /openstackclient
parent594eeae2dec0f7a43952db22c574bd0726a9dbd5 (diff)
parentf82c5b85ce9d6fee62550044fbabe54155e4b367 (diff)
downloadpython-openstackclient-1894a3cb17ce561a2109ced7e6969a49cf3a0064.tar.gz
Merge "Add --key-name and --key-unset option for server rebuild API."
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/server.py26
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py90
2 files changed, 116 insertions, 0 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 4f672428..4b0aedd7 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -1534,6 +1534,22 @@ class RebuildServer(command.ShowOne):
action='store_true',
help=_('Wait for rebuild to complete'),
)
+ key_group = parser.add_mutually_exclusive_group()
+ key_group.add_argument(
+ '--key-name',
+ metavar='<key-name>',
+ help=_("Set the key name of key pair on the rebuilt instance."
+ " Cannot be specified with the '--key-unset' option."
+ " (Supported by API versions '2.54' - '2.latest')"),
+ )
+ key_group.add_argument(
+ '--key-unset',
+ action='store_true',
+ default=False,
+ help=_("Unset the key name of key pair on the rebuilt instance."
+ " Cannot be specified with the '--key-name' option."
+ " (Supported by API versions '2.54' - '2.latest')"),
+ )
return parser
def take_action(self, parsed_args):
@@ -1558,6 +1574,16 @@ class RebuildServer(command.ShowOne):
if parsed_args.property:
kwargs['meta'] = parsed_args.property
+ if parsed_args.key_name or parsed_args.key_unset:
+ if compute_client.api_version < api_versions.APIVersion('2.54'):
+ msg = _('--os-compute-api-version 2.54 or later is required')
+ raise exceptions.CommandError(msg)
+
+ if parsed_args.key_unset:
+ kwargs['key_name'] = None
+ if parsed_args.key_name:
+ kwargs['key_name'] = parsed_args.key_name
+
server = server.rebuild(image, parsed_args.password, **kwargs)
if parsed_args.wait:
if utils.wait_for_status(
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 44e433d8..928794fb 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -2566,6 +2566,96 @@ class TestServerRebuild(TestServer):
self.server.rebuild.assert_called_with(
self.image, None, meta=expected_property)
+ def test_rebuild_with_keypair_name(self):
+ self.server.key_name = 'mykey'
+ arglist = [
+ self.server.id,
+ '--key-name', self.server.key_name,
+ ]
+ verifylist = [
+ ('server', self.server.id),
+ ('key_name', self.server.key_name)
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.app.client_manager.compute.api_version = 2.54
+ with mock.patch.object(api_versions,
+ 'APIVersion',
+ return_value=2.54):
+ self.cmd.take_action(parsed_args)
+ args = (
+ self.image,
+ None,
+ )
+ kwargs = dict(
+ key_name=self.server.key_name,
+ )
+ 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(*args, **kwargs)
+
+ def test_rebuild_with_keypair_name_older_version(self):
+ self.server.key_name = 'mykey'
+ arglist = [
+ self.server.id,
+ '--key-name', self.server.key_name,
+ ]
+ verifylist = [
+ ('server', self.server.id),
+ ('key_name', self.server.key_name)
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.app.client_manager.compute.api_version = 2.53
+ with mock.patch.object(api_versions,
+ 'APIVersion',
+ return_value=2.54):
+ self.assertRaises(exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+
+ def test_rebuild_with_keypair_unset(self):
+ self.server.key_name = 'mykey'
+ arglist = [
+ self.server.id,
+ '--key-unset',
+ ]
+ verifylist = [
+ ('server', self.server.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.app.client_manager.compute.api_version = 2.54
+ with mock.patch.object(api_versions,
+ 'APIVersion',
+ return_value=2.54):
+ self.cmd.take_action(parsed_args)
+ args = (
+ self.image,
+ None,
+ )
+ kwargs = dict(
+ key_name=None,
+ )
+ 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(*args, **kwargs)
+
+ def test_rebuild_with_key_name_and_unset(self):
+ self.server.key_name = 'mykey'
+ arglist = [
+ self.server.id,
+ '--key-name', self.server.key_name,
+ '--key-unset',
+ ]
+ verifylist = [
+ ('server', self.server.id),
+ ('key_name', self.server.key_name)
+ ]
+ self.assertRaises(utils.ParserException,
+ self.check_parser,
+ self.cmd, arglist, verifylist)
+
class TestServerRemoveFixedIP(TestServer):