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:
jjshoe 2016-04-12 16:17:01 -05:00 committed by Matt Clay
parent 15ae8c8e0b
commit 5b8d209b7e

View file

@ -228,17 +228,25 @@ 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': module.fail_json(msg="%s: %s" % (e.error_code, e.error_message))
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))
# Wait until the image is recognized. EC2 API has eventual consistency, # Wait until the image is recognized. EC2 API has eventual consistency,
# such that a successful CreateImage API call doesn't guarantee the success # such that a successful CreateImage API call doesn't guarantee the success