summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-01-15 17:44:01 +0000
committerGerrit Code Review <review@openstack.org>2016-01-15 17:44:01 +0000
commitaa041c52694c92434e4a3ca4ad4963c03624c73f (patch)
tree154666adafdcde09e55f5b9ba49b5454f4a6e484 /openstackclient
parent8654e3e366166372c8f114ad9463dbceb599cd3d (diff)
parenta5267772186add4e37c454c5a97d0ea3a1c88a81 (diff)
downloadpython-openstackclient-aa041c52694c92434e4a3ca4ad4963c03624c73f.tar.gz
Merge "Make --image parameter optional in "server rebuild""
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/server.py11
-rw-r--r--openstackclient/tests/compute/v2/test_server.py70
2 files changed, 76 insertions, 5 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 7afd18f2..f5876d4f 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -1088,8 +1088,8 @@ class RebuildServer(show.ShowOne):
parser.add_argument(
'--image',
metavar='<image>',
- required=True,
- help=_('Recreate server from this image'),
+ help=_('Recreate server from the specified image (name or ID).'
+ ' Defaults to the currently used one.'),
)
parser.add_argument(
'--password',
@@ -1107,12 +1107,13 @@ class RebuildServer(show.ShowOne):
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
- # Lookup parsed_args.image
- image = utils.find_resource(compute_client.images, parsed_args.image)
-
server = utils.find_resource(
compute_client.servers, parsed_args.server)
+ # If parsed_args.image is not set, default to the currently used one.
+ image_id = parsed_args.image or server._info.get('image', {}).get('id')
+ image = utils.find_resource(compute_client.images, image_id)
+
server = server.rebuild(image, parsed_args.password)
if parsed_args.wait:
if utils.wait_for_status(
diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py
index dba44293..72fdbafc 100644
--- a/openstackclient/tests/compute/v2/test_server.py
+++ b/openstackclient/tests/compute/v2/test_server.py
@@ -780,6 +780,76 @@ class TestServerPause(TestServer):
self.run_method_with_servers('pause', 3)
+class TestServerRebuild(TestServer):
+
+ def setUp(self):
+ super(TestServerRebuild, self).setUp()
+
+ # Return value for utils.find_resource for image
+ self.image = image_fakes.FakeImage.create_one_image()
+ self.cimages_mock.get.return_value = self.image
+
+ # Fake the rebuilt new server.
+ new_server = compute_fakes.FakeServer.create_one_server()
+
+ # Fake the server to be rebuilt. The IDs of them should be the same.
+ attrs = {
+ 'id': new_server.id,
+ 'image': {
+ 'id': self.image.id
+ },
+ 'networks': {},
+ 'adminPass': 'passw0rd',
+ }
+ methods = {
+ 'rebuild': new_server,
+ }
+ self.server = compute_fakes.FakeServer.create_one_server(
+ attrs=attrs,
+ methods=methods
+ )
+
+ # Return value for utils.find_resource for server.
+ self.servers_mock.get.return_value = self.server
+
+ self.cmd = server.RebuildServer(self.app, None)
+
+ def test_rebuild_with_current_image(self):
+ arglist = [
+ self.server.id,
+ ]
+ verifylist = [
+ ('server', self.server.id)
+ ]
+ 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.cimages_mock.get.assert_called_with(self.image.id)
+ self.server.rebuild.assert_called_with(self.image, None)
+
+ def test_rebuild_with_current_image_and_password(self):
+ password = 'password-xxx'
+ arglist = [
+ self.server.id,
+ '--password', password
+ ]
+ verifylist = [
+ ('server', self.server.id),
+ ('password', password)
+ ]
+ 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.cimages_mock.get.assert_called_with(self.image.id)
+ self.server.rebuild.assert_called_with(self.image, password)
+
+
class TestServerResize(TestServer):
def setUp(self):