From ef698b06caec0f72e48aafa8a025f2c708712571 Mon Sep 17 00:00:00 2001 From: Marcin Kulisz Date: Fri, 20 Jan 2017 13:50:54 +0000 Subject: [PATCH] Final fix for ec2_launch plugin --- bootstrapvz/plugins/ec2_launch/tasks.py | 17 +++++++++-------- bootstrapvz/providers/ec2/tasks/connection.py | 2 ++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/bootstrapvz/plugins/ec2_launch/tasks.py b/bootstrapvz/plugins/ec2_launch/tasks.py index a1ada4d..20894bc 100644 --- a/bootstrapvz/plugins/ec2_launch/tasks.py +++ b/bootstrapvz/plugins/ec2_launch/tasks.py @@ -48,20 +48,21 @@ class PrintPublicIPAddress(Task): @classmethod def run(cls, info): ec2 = info._ec2 + conn = info._ec2['connection'] logger = logging.getLogger(__name__) filename = info.manifest.plugins['ec2_launch']['print_public_ip'] if not filename: filename = '/dev/null' f = open(filename, 'w') - def instance_has_ip(): - ec2['instance'].update() - return ec2['instance']['PublicIpAddress'] - - if waituntil(instance_has_ip, timeout=120, interval=5): - logger.info('******* EC2 IP ADDRESS: %s *******' % ec2['instance']['PublicIpAddress']) - f.write(ec2['instance']['PublicIpAddress']) - else: + try: + waiter = conn.get_waiter('instance_status_ok') + waiter.wait(InstanceIds=[info._ec2['instance']['InstanceId']], + Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]) + info._ec2['instance'] = conn.describe_instances(InstanceIds=[info._ec2['instance']['InstanceId']])['Reservations'][0]['Instances'][0] + logger.info('******* EC2 IP ADDRESS: %s *******' % info._ec2['instance']['PublicIpAddress'] ) + f.write(info._ec2['instance']['PublicIpAddress']) + except: logger.error('Could not get IP address for the instance') f.write('') diff --git a/bootstrapvz/providers/ec2/tasks/connection.py b/bootstrapvz/providers/ec2/tasks/connection.py index b7302e3..cb9ab2a 100644 --- a/bootstrapvz/providers/ec2/tasks/connection.py +++ b/bootstrapvz/providers/ec2/tasks/connection.py @@ -38,6 +38,7 @@ class GetCredentials(Task): def env_key(key): return ('aws-' + key).upper().replace('-', '_') + if all(getenv(env_key(key)) is not None for key in keys): for key in keys: creds[key] = getenv(env_key(key)) @@ -45,6 +46,7 @@ class GetCredentials(Task): def provider_key(key): return key.replace('-', '_') + import boto.provider provider = boto.provider.Provider('aws') if all(getattr(provider, provider_key(key)) is not None for key in keys):