]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
engine : add suspend/resume support to User resource
authorSteven Hardy <shardy@redhat.com>
Thu, 4 Jul 2013 12:49:50 +0000 (13:49 +0100)
committerSteven Hardy <shardy@redhat.com>
Sat, 6 Jul 2013 06:35:29 +0000 (07:35 +0100)
When a User resource is in suspended state, disable the keystone
user owned by the resource

blueprint stack-suspend-resume

Change-Id: Iee8dddcfbc0fc9bd132ddfadd2a17eb1b0894f51

heat/common/heat_keystoneclient.py
heat/engine/resources/user.py
heat/tests/fakes.py
heat/tests/test_user.py

index 31a81455872c84017904343cbe72766c091823d9..f9bb9b60f7c91a2062b419cf4cdf4cf256dbf5ae 100644 (file)
@@ -143,3 +143,11 @@ class KeystoneClient(object):
         else:
             logger.error("Unexpected number of ec2 credentials %s for %s" %
                          (len(cred), user_id))
+
+    def disable_stack_user(self, user_id):
+        # FIXME : This won't work with the v3 keystone API
+        self.client.users.update_enabled(user_id, False)
+
+    def enable_stack_user(self, user_id):
+        # FIXME : This won't work with the v3 keystone API
+        self.client.users.update_enabled(user_id, True)
index 6e53ea77c46ebc7f6b51753cb6f01f5a90bc7fb5..a3c25ccf80562f9afffcde2e61a9b000d0cb6177 100644 (file)
@@ -90,6 +90,18 @@ class User(resource.Resource):
         except clients.hkc.kc.exceptions.NotFound:
             pass
 
+    def handle_suspend(self):
+        if self.resource_id is None:
+            logger.error("Cannot suspend User resource before user created!")
+            return
+        self.keystone().disable_stack_user(self.resource_id)
+
+    def handle_resume(self):
+        if self.resource_id is None:
+            logger.error("Cannot resume User resource before user created!")
+            return
+        self.keystone().enable_stack_user(self.resource_id)
+
     def FnGetRefId(self):
         return unicode(self.physical_resource_name())
 
index 154ccd0162c0b7eec83bf18dfb56e8f933d57092..124bd4d020a20853d215f512e4bc816f384caeef 100644 (file)
@@ -127,3 +127,9 @@ class FakeKeystoneClient():
             self.creds = None
         else:
             raise Exception('Incorrect user_id or access')
+
+    def enable_stack_user(self, user_id):
+        pass
+
+    def disable_stack_user(self, user_id):
+        pass
index 7cef102da73a593593b790c7f80091c947cec262..280629ec013005be9732af2704038a883276e032 100644 (file)
@@ -129,6 +129,9 @@ class UserTest(UserPolicyTestCase):
         self.assertRaises(resource.UpdateReplace,
                           rsrc.handle_update, {}, {}, {})
 
+        self.assertEqual(None, rsrc.handle_suspend())
+        self.assertEqual(None, rsrc.handle_resume())
+
         rsrc.resource_id = None
         self.assertEqual(None, rsrc.delete())
         self.assertEqual((rsrc.DELETE, rsrc.COMPLETE), rsrc.state)