]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Extract failure reason before deleting nova server
authorSteve Baker <sbaker@redhat.com>
Wed, 14 Aug 2013 03:31:01 +0000 (15:31 +1200)
committerSteve Baker <sbaker@redhat.com>
Wed, 14 Aug 2013 03:31:01 +0000 (15:31 +1200)
If a nova server create fails, the server is deleted
leaving no indication of the source of the failure.

This change extracts the failure reason from the nova
server fault attribute and includes that in the raised
error.

Change-Id: I7a4618d9e3fded3cde1c15d5322b52eaf63a68f5

heat/engine/resources/instance.py
heat/tests/test_instance.py

index 2b2376a0dea6f9aeaa0865281244adac963af9b6..11d99de89fb99e654ba91f78ba9f1f4d5e42d257 100644 (file)
@@ -323,10 +323,13 @@ class Instance(resource.Resource):
                 volume_attach.start()
                 return volume_attach.done()
             elif server.status == 'ERROR':
+                fault = server.fault or {}
+                message = fault.get('message', 'Unknown')
+                code = fault.get('code', 500)
                 delete = scheduler.TaskRunner(self._delete_server, server)
                 delete(wait_time=0.2)
-                exc = exception.Error("Build of server %s failed." %
-                                      server.name)
+                exc = exception.Error("Build of server %s failed: %s (%s)" %
+                                      (server.name, message, code))
                 raise exc
             else:
                 exc = exception.Error('%s instance[%s] status[%s]' %
index bb8f0312680e2caa099f97e2b322e0fcf78be4da..8a07c346e2b679ab1fac563255f09cc3256896f3 100644 (file)
@@ -225,6 +225,11 @@ class InstancesTest(HeatTestCase):
         instance = self._create_test_instance(return_server,
                                               'test_instance_create')
         return_server.status = 'ERROR'
+        return_server.fault = {
+            'message': 'NoValidHost',
+            'code': 500,
+            'created': '2013-08-14T03:12:10Z'
+        }
         self.m.StubOutWithMock(return_server, 'get')
         return_server.get()
         return_server.get().AndRaise(