]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
heat engine : pass json snippet into resource handle_update
authorSteven Hardy <shardy@redhat.com>
Mon, 28 Jan 2013 14:45:24 +0000 (14:45 +0000)
committerSteven Hardy <shardy@redhat.com>
Thu, 31 Jan 2013 09:56:28 +0000 (09:56 +0000)
Change handle_update to accept the resource json_snippet,
needed to decide if a non-replacement update is possible
by comparing pre and post update resource definitions

ref blueprint instance-update-stack

Change-Id: I7eedce41eae232330f6fce4f098183cbd7fd6768
Signed-off-by: Steven Hardy <shardy@redhat.com>
27 files changed:
heat/engine/resource.py
heat/engine/resources/autoscaling.py
heat/engine/resources/cloud_watch.py
heat/engine/resources/dbinstance.py
heat/engine/resources/eip.py
heat/engine/resources/instance.py
heat/engine/resources/loadbalancer.py
heat/engine/resources/quantum/quantum.py
heat/engine/resources/s3.py
heat/engine/resources/security_group.py
heat/engine/resources/stack.py
heat/engine/resources/swift.py
heat/engine/resources/user.py
heat/engine/resources/volume.py
heat/engine/resources/vpc.py
heat/engine/resources/wait_condition.py
heat/tests/test_autoscaling.py
heat/tests/test_eip.py
heat/tests/test_instance_group.py
heat/tests/test_loadbalancer.py
heat/tests/test_quantum.py
heat/tests/test_s3.py
heat/tests/test_swift.py
heat/tests/test_user.py
heat/tests/test_volume.py
heat/tests/test_vpc.py
heat/tests/test_waitcondition.py

index b3de66adbd0687f54a315671c06796c10398f01e..c8cd53d1b6fdbfebaa47780ee8dcfe2003a066a9 100644 (file)
@@ -260,7 +260,7 @@ class Resource(object):
             if err:
                 raise ValueError(err)
             if callable(getattr(self, 'handle_update', None)):
-                result = self.handle_update()
+                result = self.handle_update(json_snippet)
         except Exception as ex:
             logger.exception('update %s : %s' % (str(self), str(ex)))
             self.state_set(self.UPDATE_FAILED, str(ex))
@@ -424,7 +424,7 @@ class Resource(object):
         '''
         return base64.b64encode(data)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet=None):
         raise NotImplementedError("Update not implemented for Resource %s"
                                   % type(self))
 
@@ -442,5 +442,5 @@ class GenericResource(Resource):
     def handle_create(self):
         logger.warning('Creating generic resource (Type "%s")' % self.type())
 
-    def handle_update(self):
+    def handle_update(self, json_snippet=None):
         logger.warning('Updating generic resource (Type "%s")' % self.type())
index 9935e4ca4db07ed34b0b550577b0e448139c22b7..1de527ce7d232b5f5cf5113269fbcf06b399aea5 100644 (file)
@@ -78,7 +78,7 @@ class InstanceGroup(resource.Resource):
     def handle_create(self):
         self.resize(int(self.properties['Size']), raise_on_error=True)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         # TODO(asalkeld) if the only thing that has changed is the size then
         # call resize. Maybe have an attribute of the properties that can mark
         # it "update-able" so each resource doesn't have to figure this out.
@@ -205,7 +205,7 @@ class AutoScalingGroup(InstanceGroup, CooldownMixin):
         self.adjust(num_to_create, adjustment_type='ExactCapacity',
                     raise_on_error=True)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def adjust(self, adjustment, adjustment_type='ChangeInCapacity',
index 79a27a8bd1d5b95646030f5e7ea668161efa6fc4..e4d6f7254a34019cb452b3f311968cae65062aa7 100644 (file)
@@ -81,7 +81,7 @@ class CloudWatchAlarm(resource.Resource):
                                  stack_id=self.stack.id)
         wr.store()
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index e22c0d38a6079654667dd87a465ea64177540093..49ba870c594ec81e4e660deca6bf6861dd846368 100644 (file)
@@ -216,7 +216,7 @@ class DBInstance(stack_resource.StackResource):
         templ = template_format.parse(mysql_template)
         self.create_with_template(templ, self._params())
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index 0bcb2e6240fe90623bad0d976df655393f49ed18..c0e4dc4e472511398d2eda2d5074f5d9f0127385 100644 (file)
@@ -49,7 +49,7 @@ class ElasticIp(resource.Resource):
         self.ipaddress = ips.ip
         self.resource_id_set(ips.id)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index b2477080892ec204976b34a1ad143934e43520ce..d40e13b0dfc8404cadd691c462fd30d577483534 100644 (file)
@@ -282,7 +282,7 @@ class Instance(resource.Resource):
                                   ('nova reported unexpected',
                                    self.name, server.status))
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def validate(self):
index ebdb72aa86b1ffdddd3ff47faf1ff8c23bb4dfe2..5c7267c491b6a3c2d55bd9edfdb8e1ae67cac0d5 100644 (file)
@@ -290,7 +290,7 @@ class LoadBalancer(stack_resource.StackResource):
 
         self.create_with_template(templ, param)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index d156815a7429d925a2e266c91c427ad30145854a..72d775f08fe1f40ffba7ce1bdb921963cd51e1c7 100644 (file)
@@ -84,7 +84,7 @@ class QuantumResource(resource.Resource):
 
         raise exception.InvalidTemplateAttribute(resource=name, key=key)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def FnGetRefId(self):
index dbb9ad6fbb7b60200da4052449c881f0f0ae88da..119e43e871145c4c6a3f96dd0662e110f3a3d983 100644 (file)
@@ -91,7 +91,7 @@ class S3Bucket(resource.Resource):
         self.swift().put_container(container, headers)
         self.resource_id_set(container)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index 981c00f88c5b8ed823b35a2158dcb5d50ad0024c..90ad0d68ec1ffdcaccc900b2a4c904edf525eaf8 100644 (file)
@@ -65,7 +65,7 @@ class SecurityGroup(resource.Resource):
                         # unexpected error
                         raise
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index c18ef6129fadc5205a955dc18a472afdd31d4850..1835899de10573d743d993c1a1960bbb3ce3b681 100644 (file)
@@ -45,7 +45,7 @@ class NestedStack(stack_resource.StackResource):
 
         self.create_with_template(template, self.properties[PROP_PARAMETERS])
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index 907b287eedbbe1cce767e87f63b195d0ed849637..6cbbf180743a01c5665517214583704fef8406e5 100644 (file)
@@ -80,7 +80,7 @@ class SwiftContainer(resource.Resource):
         self.swift().put_container(container, headers)
         self.resource_id_set(container)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index 1d6938ece80abee9d91980cb994f875a87831c91..5eb23638059266b908e00c194e6d8642ebd0b46f 100644 (file)
@@ -49,7 +49,7 @@ class User(resource.Resource):
                                                 passwd)
         self.resource_id_set(uid)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
@@ -111,7 +111,7 @@ class AccessKey(resource.Resource):
             self.resource_id_set(kp.access)
             self._secret = kp.secret
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index 70587c762ed19266c91d30eef0aa3ae135486eab..9af2236f1d7617de458b15aabe9835bebf218a7a 100644 (file)
@@ -47,7 +47,7 @@ class Volume(resource.Resource):
         else:
             raise exception.Error(vol.status)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
@@ -91,7 +91,7 @@ class VolumeAttachment(resource.Resource):
         else:
             raise exception.Error(vol.status)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index 1b589cf51470ce84ed8c469b567f8be361fbf03f..6ddb7d9650f3d5932942320220ece7ad31b30dfc 100644 (file)
@@ -45,7 +45,7 @@ class VPC(resource.Resource):
         client.delete_router(router_id)
         client.delete_network(network_id)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
 
index 84f70afd118707db6641e9b8defc9e60fe70ae3b..a88b08c0fbd0d9693d45b976e83525ba9340e29f 100644 (file)
@@ -99,7 +99,7 @@ class WaitConditionHandle(resource.Resource):
             return
         self.keystone().delete_stack_user(self.resource_id)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def FnGetRefId(self):
@@ -252,7 +252,7 @@ class WaitCondition(resource.Resource):
         if status != SUCCESS:
             raise exception.Error(reason)
 
-    def handle_update(self):
+    def handle_update(self, json_snippet):
         return self.UPDATE_REPLACE
 
     def handle_delete(self):
index 34a11764e70bc573ad0af7481afd7069825bead9..5d93542dbab43f065433a729e8654735fcc777dc 100644 (file)
@@ -121,7 +121,7 @@ class AutoScalingTest(unittest.TestCase):
         self.assertEqual('WebServerGroup', resource.FnGetRefId())
         self.assertEqual('WebServerGroup-0', resource.resource_id)
         self.assertEqual(asc.AutoScalingGroup.UPDATE_REPLACE,
-                         resource.handle_update())
+                         resource.handle_update({}))
 
         resource.delete()
         self.m.VerifyAll()
index ae0a940b06d8edf1a4bcdfe3db586147ca28ed53..92570aa2835d2079d4e270e9419c1f4e62d6425b 100644 (file)
@@ -98,7 +98,7 @@ class EIPTest(unittest.TestCase):
         self.assertEqual('1', resource.FnGetAtt('AllocationId'))
 
         self.assertEqual(eip.ElasticIp.UPDATE_REPLACE,
-                         resource.handle_update())
+                         resource.handle_update({}))
 
         try:
             resource.FnGetAtt('Foo')
index ee2d2aae260816a85e9b4bcab468764d940881f6..2e2befa238cf149857d323acf09cdce5eaa456c6 100644 (file)
@@ -88,7 +88,7 @@ class InstanceGroupTest(unittest.TestCase):
         self.assertEqual('JobServerGroup', resource.FnGetRefId())
         self.assertEqual('JobServerGroup-0', resource.resource_id)
         self.assertEqual(asc.InstanceGroup.UPDATE_REPLACE,
-                         resource.handle_update())
+                         resource.handle_update({}))
 
         resource.delete()
 
index cf232889d7dd7ffd32d0f232bd8675c0a22ad1e6..9676287f2e0b8d10e34915071b8fd39a2fa3254c 100644 (file)
@@ -148,7 +148,7 @@ class LoadBalancerTest(unittest.TestCase):
             pass
 
         self.assertEqual(lb.LoadBalancer.UPDATE_REPLACE,
-                         resource.handle_update())
+                         resource.handle_update({}))
 
         self.m.VerifyAll()
 
index edb2e057de439967292408d8ebec3de27e5f86dd..b1907f19af2d3a8e1c9ab00d295a21b8153cb5b0 100644 (file)
@@ -151,7 +151,7 @@ class QuantumTest(unittest.TestCase):
         self.assertEqual('fc68ea2c-b60b-4b4f-bd82-94ec81110766',
                          resource.FnGetAtt('id'))
 
-        self.assertEqual(net.Net.UPDATE_REPLACE, resource.handle_update())
+        self.assertEqual(net.Net.UPDATE_REPLACE, resource.handle_update({}))
 
         resource.delete()
         self.m.VerifyAll()
index 8150918dd89c044d196c57c69fcf368af12f2bff..9d1db47da2b70bbb7221d606074eb1c470c40de5 100644 (file)
@@ -117,7 +117,8 @@ class s3Test(unittest.TestCase):
         except s3.exception.InvalidTemplateAttribute:
             pass
 
-        self.assertEqual(s3.S3Bucket.UPDATE_REPLACE, resource.handle_update())
+        self.assertEqual(s3.S3Bucket.UPDATE_REPLACE,
+                         resource.handle_update({}))
 
         resource.delete()
         self.m.VerifyAll()
index 24f9be3f41407e99b9d8d8decc8ccee3b326a9cc..8fb8a2db8fccf826b7848ee623ba984fb58dec47 100644 (file)
@@ -152,7 +152,7 @@ class swiftTest(unittest.TestCase):
             pass
 
         self.assertEqual(swift.SwiftContainer.UPDATE_REPLACE,
-                         resource.handle_update())
+                         resource.handle_update({}))
 
         resource.delete()
         self.m.VerifyAll()
index 115e980038e98527aa736e58a947acc7bc407a4b..2143e9adedd9b9fb93df0af9bab2e77d1dbc89b6 100644 (file)
@@ -91,7 +91,7 @@ class UserTest(unittest.TestCase):
 
         self.assertEqual('CREATE_COMPLETE', resource.state)
         self.assertEqual(user.User.UPDATE_REPLACE,
-                         resource.handle_update())
+                         resource.handle_update({}))
 
         resource.resource_id = None
         self.assertEqual(None, resource.delete())
@@ -138,7 +138,7 @@ class UserTest(unittest.TestCase):
         resource = self.create_access_key(t, stack, 'HostKeys')
 
         self.assertEqual(user.AccessKey.UPDATE_REPLACE,
-                         resource.handle_update())
+                         resource.handle_update({}))
         self.assertEqual(self.fc.access,
                          resource.resource_id)
 
index 9fdc8ce00a71ff7911b726107287c58a16a0eb7e..b831f6b32daf6ecdd4aab921335c2368f5f1fd23 100644 (file)
@@ -110,7 +110,7 @@ class VolumeTest(unittest.TestCase):
         resource = self.create_volume(t, stack, 'DataVolume')
         self.assertEqual(fv.status, 'available')
 
-        self.assertEqual(resource.handle_update(), vol.Volume.UPDATE_REPLACE)
+        self.assertEqual(resource.handle_update({}), vol.Volume.UPDATE_REPLACE)
 
         fv.status = 'in-use'
         self.assertEqual(resource.delete(), 'Volume in use')
@@ -216,7 +216,7 @@ class VolumeTest(unittest.TestCase):
         self.assertEqual(fv.status, 'available')
         resource = self.create_attachment(t, stack, 'MountPoint')
 
-        self.assertEqual(resource.handle_update(), vol.Volume.UPDATE_REPLACE)
+        self.assertEqual(resource.handle_update({}), vol.Volume.UPDATE_REPLACE)
 
         self.assertEqual(resource.delete(), None)
 
index 0544344b5957faa98149e25349cf37f4c69110a0..90e9ab22b3e3cbf21bc6f8e027bd4021760f4af4 100644 (file)
@@ -105,7 +105,7 @@ class QuantumTest(unittest.TestCase):
         ref_id = resource.FnGetRefId()
         self.assertEqual('aaaa:bbbb', ref_id)
 
-        self.assertEqual(vpc.VPC.UPDATE_REPLACE, resource.handle_update())
+        self.assertEqual(vpc.VPC.UPDATE_REPLACE, resource.handle_update({}))
 
         self.assertEqual(None, resource.delete())
         self.m.VerifyAll()
index 6a6d2c9965f183ca5233ce65726c9f6904e65793..36fdc080167f90e77994c62281f1c1f79fab5752 100644 (file)
@@ -218,7 +218,7 @@ class WaitConditionTest(unittest.TestCase):
         self.assertEqual(resource.state,
                          'CREATE_FAILED')
         self.assertEqual(wc.WaitCondition.UPDATE_REPLACE,
-                         resource.handle_update())
+                         resource.handle_update({}))
 
     def test_FnGetAtt(self):
         self.stack = self.create_stack()
@@ -322,7 +322,7 @@ class WaitConditionHandleTest(unittest.TestCase):
 
         self.assertEqual(expected_url, resource.FnGetRefId())
 
-        self.assertEqual(resource.UPDATE_REPLACE, resource.handle_update())
+        self.assertEqual(resource.UPDATE_REPLACE, resource.handle_update({}))
 
     def test_metadata_update(self):
         resource = self.stack.resources['WaitHandle']