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
This commit is contained in:
Johannes Erdfelt 2014-04-04 10:53:37 -07:00
parent 9162a5fe8f
commit 496e39a260
4 changed files with 25 additions and 22 deletions
novaclient

@ -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

@ -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')

@ -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'])

@ -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'])