From: Zane Bitter Date: Mon, 4 Mar 2013 10:31:27 +0000 (+0100) Subject: Move instance polling into check_active() X-Git-Tag: 2014.1~820^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=13223e8fba0c7c8c3f716bfd2259a008d69642f0;p=openstack-build%2Fheat-build.git Move instance polling into check_active() 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 --- diff --git a/heat/engine/resources/instance.py b/heat/engine/resources/instance.py index 1431d8ff..5d9b1696 100644 --- a/heat/engine/resources/instance.py +++ b/heat/engine/resources/instance.py @@ -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']: diff --git a/heat/tests/test_metadata_refresh.py b/heat/tests/test_metadata_refresh.py index 6834ecb9..4309010c 100644 --- a/heat/tests/test_metadata_refresh.py +++ b/heat/tests/test_metadata_refresh.py @@ -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)