From: Steven Hardy Date: Thu, 4 Jul 2013 12:49:50 +0000 (+0100) Subject: engine : add suspend/resume support to User resource X-Git-Tag: 2014.1~387^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=a4a24aaabab78cd1327fa09321e3631a582865e8;p=openstack-build%2Fheat-build.git engine : add suspend/resume support to User resource When a User resource is in suspended state, disable the keystone user owned by the resource blueprint stack-suspend-resume Change-Id: Iee8dddcfbc0fc9bd132ddfadd2a17eb1b0894f51 --- diff --git a/heat/common/heat_keystoneclient.py b/heat/common/heat_keystoneclient.py index 31a81455..f9bb9b60 100644 --- a/heat/common/heat_keystoneclient.py +++ b/heat/common/heat_keystoneclient.py @@ -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) diff --git a/heat/engine/resources/user.py b/heat/engine/resources/user.py index 6e53ea77..a3c25ccf 100644 --- a/heat/engine/resources/user.py +++ b/heat/engine/resources/user.py @@ -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()) diff --git a/heat/tests/fakes.py b/heat/tests/fakes.py index 154ccd01..124bd4d0 100644 --- a/heat/tests/fakes.py +++ b/heat/tests/fakes.py @@ -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 diff --git a/heat/tests/test_user.py b/heat/tests/test_user.py index 7cef102d..280629ec 100644 --- a/heat/tests/test_user.py +++ b/heat/tests/test_user.py @@ -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)