summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorAdam Harwell <flux.adam@gmail.com>2020-05-04 16:06:02 -0700
committerAdam Harwell <flux.adam@gmail.com>2020-05-04 16:06:02 -0700
commitae6731710965bd5be6827223abf4b679266d079c (patch)
treeda2044800118fd0938d57829af9a3c626e3e7ff7 /openstackclient
parentfdefe5558b7237757d788ee000382f913772bffc (diff)
downloadpython-openstackclient-ae6731710965bd5be6827223abf4b679266d079c.tar.gz
Correct image lookup during server rebuild
The switch to using glance from the SDK accidentally used get_image directly during a server rebuild, when it should have used find_image to match existing functionality. Bug introduced in: I36f292fb70c98f6e558f58be55d533d979c47ca7 Change-Id: I2005bd40a1bd6719670c7f7854316b4f9801b140 Story: 2007620 Task: 39643
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/server.py9
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py36
2 files changed, 42 insertions, 3 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 8be78049..93e9f966 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -1921,9 +1921,12 @@ class RebuildServer(command.ShowOne):
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.to_dict().get(
- 'image', {}).get('id')
- image = image_client.get_image(image_id)
+ if parsed_args.image:
+ image = image_client.find_image(
+ parsed_args.image, ignore_missing=False)
+ else:
+ image_id = server.to_dict().get('image', {}).get('id')
+ image = image_client.get_image(image_id)
kwargs = {}
if parsed_args.property:
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 8ec8217d..7e4c71c5 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -3577,6 +3577,41 @@ class TestServerRebuild(TestServer):
self.cmd = server.RebuildServer(self.app, None)
+ def test_rebuild_with_image_name(self):
+ image_name = 'my-custom-image'
+ user_image = image_fakes.FakeImage.create_one_image(
+ attrs={'name': image_name})
+ self.find_image_mock.return_value = user_image
+
+ attrs = {
+ 'image': {
+ 'id': user_image.id
+ },
+ 'networks': {},
+ 'adminPass': 'passw0rd',
+ }
+ new_server = compute_fakes.FakeServer.create_one_server(attrs=attrs)
+ self.server.rebuild.return_value = new_server
+
+ arglist = [
+ self.server.id,
+ '--image', image_name
+ ]
+ verifylist = [
+ ('server', self.server.id),
+ ('image', image_name)
+ ]
+ 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.find_image_mock.assert_called_with(
+ image_name, ignore_missing=False)
+ self.get_image_mock.assert_called_with(user_image.id)
+ self.server.rebuild.assert_called_with(user_image, None)
+
def test_rebuild_with_current_image(self):
arglist = [
self.server.id,
@@ -3590,6 +3625,7 @@ class TestServerRebuild(TestServer):
self.cmd.take_action(parsed_args)
self.servers_mock.get.assert_called_with(self.server.id)
+ self.find_image_mock.assert_not_called()
self.get_image_mock.assert_called_with(self.image.id)
self.server.rebuild.assert_called_with(self.image, None)