diff --git a/heat/engine/stack_user.py b/heat/engine/stack_user.py index 340c982df7..f6fa612072 100644 --- a/heat/engine/stack_user.py +++ b/heat/engine/stack_user.py @@ -135,7 +135,11 @@ class StackUser(resource.Resource): # Subclasses may optionally call this to delete a keypair created # via _create_keypair user_id = self._get_user_id() - credential_id = db_api.resource_data_get(self, 'credential_id') + try: + credential_id = db_api.resource_data_get(self, 'credential_id') + except exception.NotFound: + return + try: self.keystone().delete_stack_domain_user_keypair( user_id=user_id, project_id=self.stack.stack_user_project_id, diff --git a/heat/tests/test_stack_user.py b/heat/tests/test_stack_user.py index 3b4d10021e..0508fe7c17 100644 --- a/heat/tests/test_stack_user.py +++ b/heat/tests/test_stack_user.py @@ -304,6 +304,12 @@ class StackUserTest(HeatTestCase): self.assertEqual({'user_id': 'auserdel'}, rs_data) self.m.VerifyAll() + def test_delete_keypair_no_credential_id(self): + rsrc = self._user_create(stack_name='user_testdel', + project_id='aprojectdel', + user_id='auserdel') + rsrc._delete_keypair() + def test_delete_keypair_legacy(self): rsrc = self._user_create(stack_name='user_testdel', project_id='aprojectdel',