From 496e39a260b75432958f7d8a8d1629e425795c4e Mon Sep 17 00:00:00 2001 From: Johannes Erdfelt Date: Fri, 4 Apr 2014 10:53:37 -0700 Subject: [PATCH] Print adminPass when rebuilding from shell The 'nova rebuild' command did not print the adminPass returned by the server. This is because it discards the instance information returned by the rebuild action and fetchs the information again. This would lose the adminPass and it would not be printed for the user. This patch reuses the instance information returned by the rebuild action which ensures that the adminPass is printed by the shell. Change-Id: I144bfa298bef529c78ca04042cd37a763537f09e Closes-bug: 1302696 --- novaclient/tests/v1_1/fakes.py | 8 ++++---- novaclient/tests/v1_1/test_shell.py | 31 ++++++++++++++++------------- novaclient/v1_1/shell.py | 4 ++-- novaclient/v3/shell.py | 4 ++-- 4 files changed, 25 insertions(+), 22 deletions(-) diff --git a/novaclient/tests/v1_1/fakes.py b/novaclient/tests/v1_1/fakes.py index 4457d0b94..89a1d60fb 100644 --- a/novaclient/tests/v1_1/fakes.py +++ b/novaclient/tests/v1_1/fakes.py @@ -535,11 +535,11 @@ class FakeHTTPClient(base_client.HTTPClient): assert list(body[action]) == ['type'] assert body[action]['type'] in ['HARD', 'SOFT'] elif action == 'rebuild': - keys = list(body[action]) - if 'adminPass' in keys: - keys.remove('adminPass') - assert 'imageRef' in keys + body = body[action] + adminPass = body.get('adminPass', 'randompassword') + assert 'imageRef' in body _body = self.get_servers_1234()[2] + _body['server']['adminPass'] = adminPass elif action == 'resize': keys = body[action].keys() assert 'flavorRef' in keys diff --git a/novaclient/tests/v1_1/test_shell.py b/novaclient/tests/v1_1/test_shell.py index fb0a6e613..d86180267 100644 --- a/novaclient/tests/v1_1/test_shell.py +++ b/novaclient/tests/v1_1/test_shell.py @@ -739,34 +739,37 @@ class ShellTest(utils.TestCase): {'reboot': {'type': 'HARD'}}) def test_rebuild(self): - self.run_command('rebuild sample-server 1') - self.assert_called('GET', '/servers', pos=-8) - self.assert_called('GET', '/servers/1234', pos=-7) - self.assert_called('GET', '/images/1', pos=-6) + output = self.run_command('rebuild sample-server 1') + self.assert_called('GET', '/servers', pos=-6) + self.assert_called('GET', '/servers/1234', pos=-5) + self.assert_called('GET', '/images/1', pos=-4) self.assert_called('POST', '/servers/1234/action', - {'rebuild': {'imageRef': 1}}, pos=-5) + {'rebuild': {'imageRef': 1}}, pos=-3) self.assert_called('GET', '/flavors/1', pos=-2) self.assert_called('GET', '/images/2') + self.assertIn('adminPass', output) def test_rebuild_password(self): - self.run_command('rebuild sample-server 1 --rebuild-password asdf') - self.assert_called('GET', '/servers', pos=-8) - self.assert_called('GET', '/servers/1234', pos=-7) - self.assert_called('GET', '/images/1', pos=-6) + output = self.run_command('rebuild sample-server 1' + ' --rebuild-password asdf') + self.assert_called('GET', '/servers', pos=-6) + self.assert_called('GET', '/servers/1234', pos=-5) + self.assert_called('GET', '/images/1', pos=-4) self.assert_called('POST', '/servers/1234/action', {'rebuild': {'imageRef': 1, 'adminPass': 'asdf'}}, - pos=-5) + pos=-3) self.assert_called('GET', '/flavors/1', pos=-2) self.assert_called('GET', '/images/2') + self.assertIn('adminPass', output) def test_rebuild_preserve_ephemeral(self): self.run_command('rebuild sample-server 1 --preserve-ephemeral') - self.assert_called('GET', '/servers', pos=-8) - self.assert_called('GET', '/servers/1234', pos=-7) - self.assert_called('GET', '/images/1', pos=-6) + self.assert_called('GET', '/servers', pos=-6) + self.assert_called('GET', '/servers/1234', pos=-5) + self.assert_called('GET', '/images/1', pos=-4) self.assert_called('POST', '/servers/1234/action', {'rebuild': {'imageRef': 1, - 'preserve_ephemeral': True}}, pos=-5) + 'preserve_ephemeral': True}}, pos=-3) self.assert_called('GET', '/flavors/1', pos=-2) self.assert_called('GET', '/images/2') diff --git a/novaclient/v1_1/shell.py b/novaclient/v1_1/shell.py index f2dac6224..1c6b28c21 100644 --- a/novaclient/v1_1/shell.py +++ b/novaclient/v1_1/shell.py @@ -1210,8 +1210,8 @@ def do_rebuild(cs, args): kwargs = utils.get_resource_manager_extra_kwargs(do_rebuild, args) kwargs['preserve_ephemeral'] = args.preserve_ephemeral - server.rebuild(image, _password, **kwargs) - _print_server(cs, args) + server = server.rebuild(image, _password, **kwargs) + _print_server(cs, args, server) if args.poll: _poll_for_status(cs.servers.get, server.id, 'rebuilding', ['active']) diff --git a/novaclient/v3/shell.py b/novaclient/v3/shell.py index 75e435985..b9a03ba4f 100644 --- a/novaclient/v3/shell.py +++ b/novaclient/v3/shell.py @@ -1055,8 +1055,8 @@ def do_rebuild(cs, args): _password = None kwargs = utils.get_resource_manager_extra_kwargs(do_rebuild, args) - server.rebuild(image, _password, **kwargs) - _print_server(cs, args) + server = server.rebuild(image, _password, **kwargs) + _print_server(cs, args, server) if args.poll: _poll_for_status(cs.servers.get, server.id, 'rebuilding', ['active'])