summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Baptiste Barth <jeanbaptiste.barth@gmail.com>2015-01-06 17:10:11 +0100
committerJean-Baptiste Barth <jeanbaptiste.barth@gmail.com>2015-02-04 10:22:24 +0100
commitb451cbd37b7e9b02fcd051efa919d7411cd2fa9c (patch)
treec26a3c28656136b3fd1388aa59fd4c7fc25d6e0a
parent600fc15b42d23d80d7be64e33e3f106a11b45b05 (diff)
downloadansible-modules-core-b451cbd37b7e9b02fcd051efa919d7411cd2fa9c.tar.gz
EC2: move logic about terminated instances up (#423)
As stated in #423, the commit 7f11c3d broke ec2 spot instance launching after 1.7.2. This is because it acts on the 'res' variable which have 2 different types in the method, and in case we request spot instances, the resulting object is not a result of ec2.run_instances() but ec2.request_spot_instances(). Actually this fix doesn't seem to be relevant in the spot instances case, because by construction we won't retrieve 'terminated' instances in the end.
-rwxr-xr-x[-rw-r--r--]cloud/amazon/ec2.py20
1 files changed, 11 insertions, 9 deletions
diff --git a/cloud/amazon/ec2.py b/cloud/amazon/ec2.py
index 93b496cb..1d58721b 100644..100755
--- a/cloud/amazon/ec2.py
+++ b/cloud/amazon/ec2.py
@@ -915,6 +915,17 @@ def create_instances(module, ec2, override_count=None):
continue
else:
module.fail_json(msg = str(e))
+
+ # The instances returned through ec2.run_instances above can be in
+ # terminated state due to idempotency. See commit 7f11c3d for a complete
+ # explanation.
+ terminated_instances = [ str(instance.id) for instance in res.instances
+ if instance.state == 'terminated' ]
+ if terminated_instances:
+ module.fail_json(msg = "Instances with id(s) %s " % terminated_instances +
+ "were created previously but have since been terminated - " +
+ "use a (possibly different) 'instanceid' parameter")
+
else:
if private_ip:
module.fail_json(
@@ -952,15 +963,6 @@ def create_instances(module, ec2, override_count=None):
except boto.exception.BotoServerError, e:
module.fail_json(msg = "Instance creation failed => %s: %s" % (e.error_code, e.error_message))
- # The instances returned through run_instances can be in
- # terminated state due to idempotency.
- terminated_instances = [ str(instance.id) for instance in res.instances
- if instance.state == 'terminated' ]
- if terminated_instances:
- module.fail_json(msg = "Instances with id(s) %s " % terminated_instances +
- "were created previously but have since been terminated - " +
- "use a (possibly different) 'instanceid' parameter")
-
# wait here until the instances are up
num_running = 0
wait_timeout = time.time() + wait_timeout