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
This commit is contained in:
Adam Harwell 2020-05-04 16:06:02 -07:00
parent fdefe5558b
commit ae67317109
2 changed files with 42 additions and 3 deletions

View File

@ -1921,8 +1921,11 @@ 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')
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 = {}

View File

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