ec2_launch plugin porting to boto3 +

(print_public_ip not working yet)
This commit is contained in:
Marcin Kulisz 2016-11-12 21:57:42 +00:00
parent 07c66e9030
commit ed33a5f067

View file

@ -23,19 +23,21 @@ class LaunchEC2Instance(Task):
@classmethod @classmethod
def run(cls, info): def run(cls, info):
conn = info._ec2['connection'] conn = info._ec2['connection']
r = conn.run_instances(info._ec2['image'], r = conn.run_instances(ImageId=info._ec2['image']['ImageId'],
security_group_ids=info.manifest.plugins['ec2_launch'].get('security_group_ids'), MinCount=1,
key_name=info.manifest.plugins['ec2_launch'].get('ssh_key'), MaxCount=1,
instance_type=info.manifest.plugins['ec2_launch'].get('instance_type', 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')) 'm3.medium'))
info._ec2['instance'] = r.instances[0] info._ec2['instance'] = r['Instances'][0]
if 'tags' in info.manifest.plugins['ec2_launch']: if 'tags' in info.manifest.plugins['ec2_launch']:
def apply_format(v): raw_tags = info.manifest.plugins['ec2_launch']['tags']
return v.format(**info.manifest_vars) formatted_tags = {k: v.format(**info.manifest_vars) for k, v in raw_tags.items()}
tags = info.manifest.plugins['ec2_launch']['tags'] tags = [{'Key': k, 'Value': v} for k, v in formatted_tags.items()]
r = {k: apply_format(v) for k, v in tags.items()} conn.create_tags(Resources=[info._ec2['instance']['InstanceId']],
conn.create_tags([info._ec2['instance'].id], r) Tags=tags)
class PrintPublicIPAddress(Task): class PrintPublicIPAddress(Task):
@ -54,11 +56,11 @@ class PrintPublicIPAddress(Task):
def instance_has_ip(): def instance_has_ip():
ec2['instance'].update() ec2['instance'].update()
return ec2['instance'].ip_address return ec2['instance']['PublicIpAddress']
if waituntil(instance_has_ip, timeout=120, interval=5): if waituntil(instance_has_ip, timeout=120, interval=5):
logger.info('******* EC2 IP ADDRESS: %s *******' % ec2['instance'].ip_address) logger.info('******* EC2 IP ADDRESS: %s *******' % ec2['instance']['PublicIpAddress'])
f.write(ec2['instance'].ip_address) f.write(ec2['instance']['PublicIpAddress'])
else: else:
logger.error('Could not get IP address for the instance') logger.error('Could not get IP address for the instance')
f.write('') f.write('')