summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2021-05-23 14:52:19 +0000
committerGerrit Code Review <review@openstack.org>2021-05-23 14:52:19 +0000
commitc5619c7e3e1c55b7ac711fff8f7a836c206d96f8 (patch)
treee1febffc2e035722d04957bf3b60f4d41b1b33d9
parenta030ddd9135950a50ed5f026d645fcd33f28f4f4 (diff)
parent8a01a58a60e7f4f2c189f8ca065d8c21ccbde04f (diff)
downloadnova-c5619c7e3e1c55b7ac711fff8f7a836c206d96f8.tar.gz
Merge "Update image_base_image_ref during rebuild." into stable/train
-rw-r--r--nova/compute/api.py10
-rw-r--r--nova/tests/unit/api/openstack/compute/test_shelve.py1
-rw-r--r--nova/tests/unit/compute/test_compute.py1
3 files changed, 12 insertions, 0 deletions
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 4fa0cc2a5a..bc23cbeaa7 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -3392,6 +3392,8 @@ class API(base.Base):
new_sys_metadata = utils.get_system_metadata_from_image(
image, flavor)
+ new_sys_metadata.update({'image_base_image_ref': image_id})
+
instance.system_metadata.update(new_sys_metadata)
instance.save()
return orig_sys_metadata
@@ -3805,6 +3807,14 @@ class API(base.Base):
hypervisor.
"""
instance.task_state = task_states.SHELVING
+
+ # NOTE(aarents): Ensure image_base_image_ref is present as it will be
+ # needed during unshelve and instance rebuild done before Bug/1893618
+ # Fix dropped it.
+ instance.system_metadata.update(
+ {'image_base_image_ref': instance.image_ref}
+ )
+
instance.save(expected_task_state=[None])
self._record_action_start(context, instance, instance_actions.SHELVE)
diff --git a/nova/tests/unit/api/openstack/compute/test_shelve.py b/nova/tests/unit/api/openstack/compute/test_shelve.py
index 8d41490d86..e51729935b 100644
--- a/nova/tests/unit/api/openstack/compute/test_shelve.py
+++ b/nova/tests/unit/api/openstack/compute/test_shelve.py
@@ -54,6 +54,7 @@ class ShelvePolicyTestV21(test.NoDBTestCase):
self.req.environ['nova.context'],
vm_state=vm_states.ACTIVE, task_state=None)
instance.launched_at = instance.created_at
+ instance.system_metadata = {}
get_instance_mock.return_value = instance
mock_save.side_effect = exception.UnexpectedTaskStateError(
instance_uuid=instance.uuid, expected=None,
diff --git a/nova/tests/unit/compute/test_compute.py b/nova/tests/unit/compute/test_compute.py
index 77f23c30fe..cfdf404c29 100644
--- a/nova/tests/unit/compute/test_compute.py
+++ b/nova/tests/unit/compute/test_compute.py
@@ -9133,6 +9133,7 @@ class ComputeAPITestCase(BaseTestCase):
'image_ramdisk_id': uuids.ramdisk_id,
'image_something_else': 'meow',
'preserved': 'preserve this!',
+ 'image_base_image_ref': image_ref,
'boot_roles': ''},
sys_meta)