Skip to content

Commit ae67317

Browse files
committed
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
1 parent fdefe55 commit ae67317

2 files changed

Lines changed: 42 additions & 3 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1921,9 +1921,12 @@ def _show_progress(progress):
19211921
compute_client.servers, parsed_args.server)
19221922

19231923
# If parsed_args.image is not set, default to the currently used one.
1924-
image_id = parsed_args.image or server.to_dict().get(
1925-
'image', {}).get('id')
1926-
image = image_client.get_image(image_id)
1924+
if parsed_args.image:
1925+
image = image_client.find_image(
1926+
parsed_args.image, ignore_missing=False)
1927+
else:
1928+
image_id = server.to_dict().get('image', {}).get('id')
1929+
image = image_client.get_image(image_id)
19271930

19281931
kwargs = {}
19291932
if parsed_args.property:

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3577,6 +3577,41 @@ def setUp(self):
35773577

35783578
self.cmd = server.RebuildServer(self.app, None)
35793579

3580+
def test_rebuild_with_image_name(self):
3581+
image_name = 'my-custom-image'
3582+
user_image = image_fakes.FakeImage.create_one_image(
3583+
attrs={'name': image_name})
3584+
self.find_image_mock.return_value = user_image
3585+
3586+
attrs = {
3587+
'image': {
3588+
'id': user_image.id
3589+
},
3590+
'networks': {},
3591+
'adminPass': 'passw0rd',
3592+
}
3593+
new_server = compute_fakes.FakeServer.create_one_server(attrs=attrs)
3594+
self.server.rebuild.return_value = new_server
3595+
3596+
arglist = [
3597+
self.server.id,
3598+
'--image', image_name
3599+
]
3600+
verifylist = [
3601+
('server', self.server.id),
3602+
('image', image_name)
3603+
]
3604+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
3605+
3606+
# Get the command object to test.
3607+
self.cmd.take_action(parsed_args)
3608+
3609+
self.servers_mock.get.assert_called_with(self.server.id)
3610+
self.find_image_mock.assert_called_with(
3611+
image_name, ignore_missing=False)
3612+
self.get_image_mock.assert_called_with(user_image.id)
3613+
self.server.rebuild.assert_called_with(user_image, None)
3614+
35803615
def test_rebuild_with_current_image(self):
35813616
arglist = [
35823617
self.server.id,
@@ -3590,6 +3625,7 @@ def test_rebuild_with_current_image(self):
35903625
self.cmd.take_action(parsed_args)
35913626

35923627
self.servers_mock.get.assert_called_with(self.server.id)
3628+
self.find_image_mock.assert_not_called()
35933629
self.get_image_mock.assert_called_with(self.image.id)
35943630
self.server.rebuild.assert_called_with(self.image, None)
35953631

0 commit comments

Comments
 (0)