# under the License.
from heat.common import exception
+from heat.engine import clients
from heat.engine import resource
from heat.openstack.common import log as logging
return self.stack.resource_by_refid(self.properties['UserName'])
def handle_create(self):
- try:
- user_id = self._get_user().resource_id
- except AttributeError:
+ user = self._get_user()
+ if user is None:
raise exception.NotFound('could not find user %s' %
self.properties['UserName'])
- kp = self.keystone().get_ec2_keypair(user_id)
+ kp = self.keystone().get_ec2_keypair(user.resource_id)
if not kp:
raise exception.Error("Error creating ec2 keypair for user %s" %
- user_id)
- else:
- self.resource_id_set(kp.access)
- self._secret = kp.secret
+ user)
+
+ self.resource_id_set(kp.access)
+ self._secret = kp.secret
def handle_update(self, json_snippet):
return self.UPDATE_REPLACE
def handle_delete(self):
- self.resource_id_set(None)
self._secret = None
- user_id = self._get_user().resource_id
- if user_id and self.resource_id:
- self.keystone().delete_ec2_keypair(user_id, self.resource_id)
+ if self.resource_id is None:
+ return
+
+ user = self._get_user()
+ if user is None:
+ logger.warning('Error deleting %s - user not found' % str(self))
+ return
+ user_id = user.resource_id
+ if user_id:
+ try:
+ self.keystone().delete_ec2_keypair(user_id, self.resource_id)
+ except clients.hkc.kc.exceptions.NotFound:
+ pass
+
+ self.resource_id_set(None)
def _secret_accesskey(self):
'''
from heat.engine.resources import user
from heat.tests import fakes
+import keystoneclient.exceptions
+
@attr(tag=['unit', 'resource', 'User'])
@attr(speed='fast')
self.assertEqual(None, resource.delete())
self.m.VerifyAll()
+ # Check for double delete
+ test_key = object()
+ self.m.StubOutWithMock(self.fc, 'delete_ec2_keypair')
+ NotFound = keystoneclient.exceptions.NotFound
+ self.fc.delete_ec2_keypair(self.fc.user_id,
+ test_key).AndRaise(NotFound('Gone'))
+
+ self.m.ReplayAll()
+ resource.state = resource.CREATE_COMPLETE
+ resource.resource_id = test_key
+ self.assertEqual(None, resource.delete())
+ self.m.VerifyAll()
+
def test_access_key_no_user(self):
self.m.ReplayAll()
self.assertEqual(user.AccessKey.CREATE_FAILED,
resource.state)
+ self.assertEqual(None, resource.delete())
+
self.m.VerifyAll()