summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.openstack.org>2018-09-21 12:01:39 +0000
committerGerrit Code Review <review@openstack.org>2018-09-21 12:01:40 +0000
commitd9ad26d61999f47adfecc5dcdc89c67bf9e95f4e (patch)
tree3161332e6cab213dd7424756c8ab2015aa6c3f18
parent9b2a1f2b2b96eb16a33c8d16cf50ffc6b64f520a (diff)
parent1316e08c85456ca69bc55bf9a90a24e341884952 (diff)
downloadnova-d9ad26d61999f47adfecc5dcdc89c67bf9e95f4e.tar.gz
Merge "Add unshelve instance error info to fault table" into stable/pike16.1.5
-rw-r--r--nova/conductor/manager.py5
-rw-r--r--nova/tests/unit/conductor/test_conductor.py9
2 files changed, 12 insertions, 2 deletions
diff --git a/nova/conductor/manager.py b/nova/conductor/manager.py
index 230d0aa430..06c1eead65 100644
--- a/nova/conductor/manager.py
+++ b/nova/conductor/manager.py
@@ -661,7 +661,7 @@ class ComputeTaskManager(base.Base):
context, 'get_image_info', instance.uuid):
try:
image = safe_image_show(context, image_id)
- except exception.ImageNotFound:
+ except exception.ImageNotFound as error:
instance.vm_state = vm_states.ERROR
instance.save()
@@ -669,6 +669,9 @@ class ComputeTaskManager(base.Base):
'cannot be found.') % image_id
LOG.error(reason, instance=instance)
+ compute_utils.add_instance_fault_from_exc(
+ context, instance, error, sys.exc_info(),
+ fault_message=reason)
raise exception.UnshelveException(
instance_id=instance.uuid, reason=reason)
diff --git a/nova/tests/unit/conductor/test_conductor.py b/nova/tests/unit/conductor/test_conductor.py
index 8adaa21826..459fccf7f3 100644
--- a/nova/tests/unit/conductor/test_conductor.py
+++ b/nova/tests/unit/conductor/test_conductor.py
@@ -972,7 +972,9 @@ class _BaseTaskTestCase(object):
do_test()
- def test_unshelve_offloaded_instance_glance_image_not_found(self):
+ @mock.patch('nova.compute.utils.add_instance_fault_from_exc')
+ def test_unshelve_offloaded_instance_glance_image_not_found(self,
+ add_instance_fault_from_exc):
shelved_image_id = "image_not_found"
instance = self._create_fake_instance_obj()
@@ -992,10 +994,15 @@ class _BaseTaskTestCase(object):
system_metadata['shelved_host'] = 'fake-mini'
system_metadata['shelved_image_id'] = shelved_image_id
+ reason = ('Unshelve attempted but the image image_not_found '
+ 'cannot be found.')
+
self.assertRaises(
exc.UnshelveException,
self.conductor_manager.unshelve_instance,
self.context, instance)
+ add_instance_fault_from_exc.assert_called_once_with(
+ self.context, instance, e, mock.ANY, fault_message=reason)
self.assertEqual(instance.vm_state, vm_states.ERROR)
def test_unshelve_offloaded_instance_image_id_is_none(self):