]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Move instance polling into check_active()
authorZane Bitter <zbitter@redhat.com>
Mon, 4 Mar 2013 10:31:27 +0000 (11:31 +0100)
committerZane Bitter <zbitter@redhat.com>
Mon, 4 Mar 2013 10:32:58 +0000 (11:32 +0100)
Don't poll for the instance status in handle_create(). Allow
Resource.create() to poll the resource using check_active().

Change-Id: I13a8fefcef6594d014e7e5a3131f9342521e367d
Signed-off-by: Zane Bitter <zbitter@redhat.com>
heat/engine/resources/instance.py
heat/tests/test_metadata_refresh.py

index 1431d8ffcdce5e65ce4dc4190e12f145685ff40d..5d9b169607a8b969b04a12b4f9ac65204acec361 100644 (file)
@@ -114,6 +114,7 @@ class Instance(resource.Resource):
         super(Instance, self).__init__(name, json_snippet, stack)
         self.ipaddress = None
         self.mime_string = None
+        self._server_status = None
 
     def _set_ipaddress(self, networks):
         '''
@@ -293,19 +294,25 @@ class Instance(resource.Resource):
             if server is not None:
                 self.resource_id_set(server.id)
 
-        while server.status == 'BUILD':
-            server.get()
-            eventlet.sleep(1)
+        self._server_status = server.status
+
+    def check_active(self):
+        if self._server_status == 'ACTIVE':
+            return True
+
+        server = self.nova().servers.get(self.resource_id)
+        self._server_status = server.status
+        if server.status == 'BUILD':
+            return False
         if server.status == 'ACTIVE':
             self._set_ipaddress(server.networks)
+            self.attach_volumes()
+            return True
         else:
             raise exception.Error('%s instance[%s] status[%s]' %
                                   ('nova reported unexpected',
                                    self.name, server.status))
 
-        if self.properties['Volumes']:
-            self.attach_volumes()
-
     def attach_volumes(self):
         server_id = self.resource_id
         for vol in self.properties['Volumes']:
index 6834ecb9a69d6d8111871c868f2f5f3b8143a7ff..4309010c74f3ac3f8fe79b93d014e68b06647809 100644 (file)
@@ -150,7 +150,9 @@ class MetadataRefreshTest(unittest.TestCase):
 
         if stub:
             self.m.StubOutWithMock(instance.Instance, 'handle_create')
-            instance.Instance.handle_create().MultipleTimes().AndReturn(None)
+            self.m.StubOutWithMock(instance.Instance, 'check_active')
+            instance.Instance.handle_create().AndReturn(None)
+            instance.Instance.check_active().AndReturn(True)
             self.m.StubOutWithMock(instance.Instance, 'FnGetAtt')
 
         return stack
@@ -210,7 +212,9 @@ class WaitCondMetadataUpdateTest(unittest.TestCase):
         self.stack_id = stack.store()
 
         self.m.StubOutWithMock(instance.Instance, 'handle_create')
+        self.m.StubOutWithMock(instance.Instance, 'check_active')
         instance.Instance.handle_create().MultipleTimes().AndReturn(None)
+        instance.Instance.check_active().AndReturn(True)
 
         self.m.StubOutWithMock(wc.WaitConditionHandle, 'keystone')
         wc.WaitConditionHandle.keystone().MultipleTimes().AndReturn(self.fc)