From ed33a5f067aefae8990c965c65630ab5db40363a Mon Sep 17 00:00:00 2001 From: Marcin Kulisz Date: Sat, 12 Nov 2016 21:57:42 +0000 Subject: [PATCH] ec2_launch plugin porting to boto3 + (print_public_ip not working yet) --- bootstrapvz/plugins/ec2_launch/tasks.py | 28 +++++++++++++------------ 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/bootstrapvz/plugins/ec2_launch/tasks.py b/bootstrapvz/plugins/ec2_launch/tasks.py index b0c5add..a1ada4d 100644 --- a/bootstrapvz/plugins/ec2_launch/tasks.py +++ b/bootstrapvz/plugins/ec2_launch/tasks.py @@ -23,19 +23,21 @@ class LaunchEC2Instance(Task): @classmethod def run(cls, info): conn = info._ec2['connection'] - r = conn.run_instances(info._ec2['image'], - security_group_ids=info.manifest.plugins['ec2_launch'].get('security_group_ids'), - key_name=info.manifest.plugins['ec2_launch'].get('ssh_key'), - instance_type=info.manifest.plugins['ec2_launch'].get('instance_type', + r = conn.run_instances(ImageId=info._ec2['image']['ImageId'], + MinCount=1, + MaxCount=1, + SecurityGroupIds=info.manifest.plugins['ec2_launch'].get('security_group_ids'), + KeyName=info.manifest.plugins['ec2_launch'].get('ssh_key'), + InstanceType=info.manifest.plugins['ec2_launch'].get('instance_type', 'm3.medium')) - info._ec2['instance'] = r.instances[0] + info._ec2['instance'] = r['Instances'][0] if 'tags' in info.manifest.plugins['ec2_launch']: - def apply_format(v): - return v.format(**info.manifest_vars) - tags = info.manifest.plugins['ec2_launch']['tags'] - r = {k: apply_format(v) for k, v in tags.items()} - conn.create_tags([info._ec2['instance'].id], r) + raw_tags = info.manifest.plugins['ec2_launch']['tags'] + formatted_tags = {k: v.format(**info.manifest_vars) for k, v in raw_tags.items()} + tags = [{'Key': k, 'Value': v} for k, v in formatted_tags.items()] + conn.create_tags(Resources=[info._ec2['instance']['InstanceId']], + Tags=tags) class PrintPublicIPAddress(Task): @@ -54,11 +56,11 @@ class PrintPublicIPAddress(Task): def instance_has_ip(): ec2['instance'].update() - return ec2['instance'].ip_address + return ec2['instance']['PublicIpAddress'] if waituntil(instance_has_ip, timeout=120, interval=5): - logger.info('******* EC2 IP ADDRESS: %s *******' % ec2['instance'].ip_address) - f.write(ec2['instance'].ip_address) + logger.info('******* EC2 IP ADDRESS: %s *******' % ec2['instance']['PublicIpAddress']) + f.write(ec2['instance']['PublicIpAddress']) else: logger.error('Could not get IP address for the instance') f.write('')