From e6e8f65e9286fed33df20790cdb90af7379fc0b0 Mon Sep 17 00:00:00 2001 From: Raghu Udiyar Date: Sat, 31 Jan 2015 14:12:49 +0530 Subject: [PATCH] Creating ami should be idempotent If the ami already exists, return details of the duplicate ami instead of failing with an error. --- lib/ansible/modules/cloud/amazon/ec2_ami.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/ansible/modules/cloud/amazon/ec2_ami.py b/lib/ansible/modules/cloud/amazon/ec2_ami.py index 420c6e2f15c..98c41357212 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_ami.py +++ b/lib/ansible/modules/cloud/amazon/ec2_ami.py @@ -165,7 +165,16 @@ def create_image(module, ec2): image_id = ec2.create_image(**params) except boto.exception.BotoServerError, e: - module.fail_json(msg = "%s: %s" % (e.error_code, e.error_message)) + 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) + sys.exit(0) + 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, # such that a successful CreateImage API call doesn't guarantee the success