]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Consistently create the db resource entry.
authorAngus Salkeld <asalkeld@redhat.com>
Fri, 13 Apr 2012 06:25:07 +0000 (16:25 +1000)
committerAngus Salkeld <asalkeld@redhat.com>
Fri, 13 Apr 2012 10:15:46 +0000 (20:15 +1000)
Signed-off-by: Angus Salkeld <asalkeld@redhat.com>
heat/engine/resources.py

index 20480365b8bd3d14193f2c5d1eb3ff94f7274a03..fb36061dc8b242c4f955fc11c209a13541246700 100644 (file)
@@ -45,6 +45,7 @@ class Resource(object):
         self.state = None
         self.stack = stack
         self.name = name
+        self.id = None
         self.instance_id = None
         resource = db_api.resource_get_by_name_and_stack(None, name, stack.id)
         if resource:
@@ -85,6 +86,19 @@ class Resource(object):
         self.stack.resolve_joins(self.t)
         self.stack.resolve_base64(self.t)
 
+        rs = {}
+        rs['state'] = self.CREATE_IN_PROGRESS
+        rs['nova_instance'] = None
+        rs['stack_id'] = self.stack.id
+        rs['name'] = self.name
+        rs['stack_name'] = self.stack.name
+        new_rs = db_api.resource_create(None, rs)
+        self.id = new_rs.id
+
+    def instance_id_set(self, inst):
+        rsc = db_api.resource_get(None, self.id)
+        rsc.nova_instance = inst
+        self.instance_id = inst
 
     def state_set(self, new_state, reason="state changed"):
         if new_state != self.state:
@@ -139,6 +153,7 @@ class GenericResource(Resource):
         self.state_set(self.CREATE_IN_PROGRESS)
         super(GenericResource, self).create()
         print 'creating GenericResource %s' % self.name
+        self.state_set(self.CREATE_COMPLETE)
 
 class SecurityGroup(Resource):
 
@@ -158,7 +173,7 @@ class SecurityGroup(Resource):
         Resource.create(self)
 
         sec = self.nova().security_groups.create(self.name, self.description)
-        self.instance_id = sec.id
+        self.instance_id_set(sec.id)
 
         if self.t['Properties'].has_key('SecurityGroupIngress'):
             for i in self.t['Properties']['SecurityGroupIngress']:
@@ -167,6 +182,7 @@ class SecurityGroup(Resource):
                                                                i['FromPort'],
                                                                i['ToPort'],
                                                                i['CidrIp'])
+        self.state_set(self.CREATE_COMPLETE)
 
     def delete(self):
         if self.state == self.DELETE_IN_PROGRESS or self.state == self.DELETE_COMPLETE:
@@ -208,7 +224,8 @@ class ElasticIp(Resource):
         ips = self.nova().floating_ips.create()
         print 'ElasticIp create %s' % str(ips)
         self.ipaddress = ips.ip
-        self.instance_id = ips.id
+        self.instance_id_set(ips.id)
+        self.state_set(self.CREATE_COMPLETE)
 
     def delete(self):
         """De-allocate a floating IP."""
@@ -256,6 +273,8 @@ class ElasticIpAssociation(Resource):
 
         server = self.nova().servers.get(self.t['Properties']['InstanceId'])
         server.add_floating_ip(self.t['Properties']['EIP'])
+        self.instance_id_set(self.t['Properties']['EIP'])
+        self.state_set(self.CREATE_COMPLETE)
 
     def delete(self):
         """Remove a floating IP address from a server."""
@@ -289,8 +308,8 @@ class Volume(Resource):
             eventlet.sleep(1)
             vol.get()
         if vol.status == 'available':
+            self.instance_id_set(vol.id)
             self.state_set(self.CREATE_COMPLETE)
-            self.instance_id = vol.id
         else:
             self.state_set(self.CREATE_FAILED)
 
@@ -334,8 +353,8 @@ class VolumeAttachment(Resource):
             eventlet.sleep(1)
             vol.get()
         if vol.status == 'in-use':
+            self.instance_id_set(va.id)
             self.state_set(self.CREATE_COMPLETE)
-            self.instance_id = va.id
         else:
             self.state_set(self.CREATE_FAILED)
 
@@ -485,16 +504,8 @@ class Instance(Resource):
             server.get()
             eventlet.sleep(1)
         if server.status == 'ACTIVE':
+            self.instance_id_set(server.id)
             self.state_set(self.CREATE_COMPLETE)
-            self.instance_id = server.id
-            rs = {}
-            rs['state'] = 'ACTIVE'
-            rs['nova_instance'] = self.instance_id
-            rs['stack_id'] = self.stack.id
-            rs['name'] = self.name
-            rs['stack_name'] = self.stack.name
-            new_rs = db_api.resource_create(None, rs)
-            self.id = new_rs.id
             # just record the first ipaddress
             for n in server.networks:
                 self.ipaddress = server.networks[n][0]