message = _("Multiple 'image' service matches for region %(region)s. This "
"generally means that a region is required and you have not "
"supplied one.")
+
+class UserParameterMissing(OpenstackException):
+ message = _("The Parameter (%(key)s) was not provided.")
+
+
+class UserKeyPairMissing(OpenstackException):
+ message = _("The Key (%(key_name)s) could not be found.")
+
+
+class ImageNotFound(OpenstackException):
+ message = _("The Image (%(image_name)s) could not be found.")
if not failed:
try:
self.resources[r].create()
- except:
+ except Exception as ex:
+ logger.error('create: %s' % str(ex))
failed = True
- self.resources[r].state_set(self.resources[r].CREATE_FAILED)
+ self.resources[r].state_set(self.resources[r].CREATE_FAILED, str(ex))
else:
self.resources[r].state_set(self.resources[r].CREATE_FAILED)
for r in order:
try:
self.resources[r].delete()
- except:
- self.resources[r].state_set(self.resources[r].DELETE_FAILED)
+ except Exception as ex:
+ logger.error('delete: %s' % str(ex))
+ self.resources[r].state_set(self.resources[r].DELETE_FAILED, str(ex))
def delete(self):
pool = eventlet.GreenPool()
from novaclient.v1_1 import client
+from heat.common import exception
from heat.db import api as db_api
logger = logging.getLogger('heat.engine.resources')
props = self.t['Properties']
if not props.has_key('KeyName'):
- props['KeyName'] = 'default-key-name'
+ raise exception.UserParameterMissing(key='KeyName')
if not props.has_key('InstanceType'):
- props['InstanceType'] = 's1.large'
+ raise exception.UserParameterMissing(key='InstanceType')
if not props.has_key('ImageId'):
- props['ImageId'] = 'F16-x86_64'
+ raise exception.UserParameterMissing(key='ImageId')
for p in props:
if p == 'UserData':
flavor = self.itype_oflavor[self.t['Properties']['InstanceType']]
distro_name = self.stack.parameter_get('LinuxDistribution')
key_name = self.t['Properties']['KeyName']
- image_name = self.t['Properties']['ImageId']
+ keypairs = self.nova().keypairs.list()
+ key_exists = False
+ for k in keypairs:
+ if k.name == key_name:
+ # cool it exists
+ key_exists = True
+ break
+ if not key_exists:
+ raise exception.UserKeyPairMissing(key_name=key_name)
+
+ image_name = self.t['Properties']['ImageId']
image_id = None
image_list = self.nova().images.list()
for o in image_list:
if o.name == image_name:
image_id = o.id
- # TODO(asalkeld) we need to test earlier whether the image_id exists.
if image_id is None:
- raise
+ raise exception.ImageNotFound(image_name=image_name)
flavor_list = self.nova().flavors.list()
for o in flavor_list: