Speed up AMI code by not attempting to create the AMI without checkin… (#2551)
* Speed up AMI code by not attempting to create the AMI without checking on the name first. Also simplifies code for reporting errors from AMI creation, greatly. * remove sys.exit
This commit is contained in:
parent
15ae8c8e0b
commit
5b8d209b7e
1 changed files with 17 additions and 9 deletions
|
@ -228,16 +228,24 @@ def create_image(module, ec2):
|
||||||
'description': description,
|
'description': description,
|
||||||
'no_reboot': no_reboot}
|
'no_reboot': no_reboot}
|
||||||
|
|
||||||
|
images = ec2.get_all_images(filters={'name': name})
|
||||||
|
|
||||||
|
if images and images[0]:
|
||||||
|
module.exit_json(msg="AMI name already present", image_id=images[0].id, state=images[0].state, changed=False)
|
||||||
|
|
||||||
|
if device_mapping:
|
||||||
|
bdm = BlockDeviceMapping()
|
||||||
|
for device in device_mapping:
|
||||||
|
if 'device_name' not in device:
|
||||||
|
module.fail_json(msg = 'Device name must be set for volume')
|
||||||
|
device_name = device['device_name']
|
||||||
|
del device['device_name']
|
||||||
|
bd = BlockDeviceType(**device)
|
||||||
|
bdm[device_name] = bd
|
||||||
|
params['block_device_mapping'] = bdm
|
||||||
|
|
||||||
image_id = ec2.create_image(**params)
|
image_id = ec2.create_image(**params)
|
||||||
except boto.exception.BotoServerError, e:
|
except boto.exception.BotoServerError, e:
|
||||||
if e.error_code == 'InvalidAMIName.Duplicate':
|
|
||||||
images = ec2.get_all_images()
|
|
||||||
for img in images:
|
|
||||||
if img.name == name:
|
|
||||||
module.exit_json(msg="AMI name already present", image_id=img.id, state=img.state, changed=False)
|
|
||||||
else:
|
|
||||||
module.fail_json(msg="Error in retrieving duplicate AMI details")
|
|
||||||
else:
|
|
||||||
module.fail_json(msg="%s: %s" % (e.error_code, e.error_message))
|
module.fail_json(msg="%s: %s" % (e.error_code, e.error_message))
|
||||||
|
|
||||||
# Wait until the image is recognized. EC2 API has eventual consistency,
|
# Wait until the image is recognized. EC2 API has eventual consistency,
|
||||||
|
|
Loading…
Reference in a new issue