]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Reset state before resource recreation
authorJUN JIE NAN <nanjj@cn.ibm.com>
Thu, 18 Jul 2013 07:39:10 +0000 (15:39 +0800)
committerGerrit Code Review <review@openstack.org>
Mon, 22 Jul 2013 01:23:31 +0000 (01:23 +0000)
So the destroyed resource can be recreated, and HARestarted main logic
resource destory and create can work.

Change-Id: Id79988560e105c254d304e30d598427a2bbc5b26
Fixes: bug #1202492
heat/engine/parser.py
heat/engine/resource.py
heat/tests/test_resource.py

index b65782eb9b3ca2123c311a8e8ee5a1e903bcdc92..a0b40711cd462b0df4aee57efbfa2f11f23ffae4 100644 (file)
@@ -516,6 +516,7 @@ class Stack(object):
         for res in deps:
             if not failed:
                 try:
+                    res.state_reset()
                     scheduler.TaskRunner(res.create)()
                 except exception.ResourceFailure as ex:
                     logger.exception('create')
index 72735348c4b4469c0b1010da176aedd994728bfc..59f5ef05012e35491f7e8c4f15fdeed973e38d27 100644 (file)
@@ -622,6 +622,13 @@ class Resource(object):
         # By default, no attributes resolve
         pass
 
+    def state_reset(self):
+        """
+        Reset state to (INIT, COMPLETE)
+        """
+        self.action = self.INIT
+        self.status = self.COMPLETE
+
     def state_set(self, action, status, reason="state changed"):
         if action not in self.ACTIONS:
             raise ValueError("Invalid action %s" % action)
index d5ac74c0b8b43aaa526471e47e0620b3cf44834e..048b465a5125b957c6ddbf3e28b72924100492a9 100644 (file)
@@ -272,6 +272,18 @@ class ResourceTest(HeatTestCase):
         self.assertRaises(exception.ResourceFailure, create)
         self.assertEqual((res.CREATE, res.FAILED), res.state)
 
+    def test_create_resource_after_destroy(self):
+        tmpl = {'Type': 'GenericResourceType'}
+        rname = 'test_res_id_none'
+        res = generic_rsrc.ResourceWithProps(rname, tmpl, self.stack)
+        res.id = 'test_res_id'
+        (res.action, res.status) = (res.INIT, res.DELETE)
+        self.assertRaises(exception.ResourceFailure, res.create)
+        res.destroy()
+        res.state_reset()
+        scheduler.TaskRunner(res.create)()
+        self.assertEqual((res.CREATE, res.COMPLETE), res.state)
+
     def test_update_ok(self):
         tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
         res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)