Merge pull request #4368 from sayap/ec2_ami
ec2_ami: Account for AWS's "eventual consistency" with AMI creation.
This commit is contained in:
commit
d1a751cfb1
1 changed files with 17 additions and 2 deletions
|
@ -165,6 +165,7 @@ AWS_REGIONS = ['ap-northeast-1',
|
||||||
'us-west-2']
|
'us-west-2']
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
import boto
|
||||||
import boto.ec2
|
import boto.ec2
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print "failed=True msg='boto required for this module'"
|
print "failed=True msg='boto required for this module'"
|
||||||
|
@ -195,8 +196,22 @@ def create_image(module, ec2):
|
||||||
except boto.exception.BotoServerError, e:
|
except boto.exception.BotoServerError, e:
|
||||||
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 here until the image is gone
|
# Wait until the image is recognized. EC2 API has eventual consistency,
|
||||||
img = ec2.get_image(image_id)
|
# such that a successful CreateImage API call doesn't guarantee the success
|
||||||
|
# of subsequent DescribeImages API call using the new image id returned.
|
||||||
|
for i in range(30):
|
||||||
|
try:
|
||||||
|
img = ec2.get_image(image_id)
|
||||||
|
break
|
||||||
|
except boto.exception.EC2ResponseError as e:
|
||||||
|
if e.error_code == 'InvalidAMIID.NotFound':
|
||||||
|
time.sleep(1)
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
module.fail_json(msg = "timed out waiting for image to be recognized")
|
||||||
|
|
||||||
|
# wait here until the image is created
|
||||||
wait_timeout = time.time() + wait_timeout
|
wait_timeout = time.time() + wait_timeout
|
||||||
while wait and wait_timeout > time.time() and (img is None or img.state != 'available'):
|
while wait and wait_timeout > time.time() and (img is None or img.state != 'available'):
|
||||||
img = ec2.get_image(image_id)
|
img = ec2.get_image(image_id)
|
||||||
|
|
Loading…
Reference in a new issue