Merge pull request #2021 from h3biomed/enis_at_launch

ec2: allow ENIs to be specified at instance launch
This commit is contained in:
Brian Coca 2015-09-08 12:45:05 -04:00
commit c4140cc6db

View file

@ -240,6 +240,13 @@ options:
required: false required: false
default: null default: null
aliases: [] aliases: []
network_interfaces:
version_added: "2.0"
description:
- A list of existing network interfaces to attach to the instance at launch. When specifying existing network interfaces, none of the assign_public_ip, private_ip, vpc_subnet_id, group, or group_id parameters may be used. (Those parameters are for creating a new network interface at launch.)
required: false
default: null
aliases: ['network_interface']
author: author:
- "Tim Gerla (@tgerla)" - "Tim Gerla (@tgerla)"
@ -352,6 +359,19 @@ EXAMPLES = '''
vpc_subnet_id: subnet-29e63245 vpc_subnet_id: subnet-29e63245
assign_public_ip: yes assign_public_ip: yes
# Examples using pre-existing network interfaces
- ec2:
key_name: mykey
instance_type: t2.small
image: ami-f005ba11
network_interface: eni-deadbeef
- ec2:
key_name: mykey
instance_type: t2.small
image: ami-f005ba11
network_interfaces: ['eni-deadbeef', 'eni-5ca1ab1e']
# Launch instances, runs some tasks # Launch instances, runs some tasks
# and then terminate them # and then terminate them
@ -826,6 +846,7 @@ def create_instances(module, ec2, vpc, override_count=None):
count_tag = module.params.get('count_tag') count_tag = module.params.get('count_tag')
source_dest_check = module.boolean(module.params.get('source_dest_check')) source_dest_check = module.boolean(module.params.get('source_dest_check'))
termination_protection = module.boolean(module.params.get('termination_protection')) termination_protection = module.boolean(module.params.get('termination_protection'))
network_interfaces = module.params.get('network_interfaces')
# group_id and group_name are exclusive of each other # group_id and group_name are exclusive of each other
if group_id and group_name: if group_id and group_name:
@ -926,11 +947,23 @@ def create_instances(module, ec2, vpc, override_count=None):
interfaces = boto.ec2.networkinterface.NetworkInterfaceCollection(interface) interfaces = boto.ec2.networkinterface.NetworkInterfaceCollection(interface)
params['network_interfaces'] = interfaces params['network_interfaces'] = interfaces
else: else:
params['subnet_id'] = vpc_subnet_id if network_interfaces:
if vpc_subnet_id: if isinstance(network_interfaces, basestring):
params['security_group_ids'] = group_id network_interfaces = [network_interfaces]
interfaces = []
for i, network_interface_id in enumerate(network_interfaces):
interface = boto.ec2.networkinterface.NetworkInterfaceSpecification(
network_interface_id=network_interface_id,
device_index=i)
interfaces.append(interface)
params['network_interfaces'] = \
boto.ec2.networkinterface.NetworkInterfaceCollection(*interfaces)
else: else:
params['security_groups'] = group_name params['subnet_id'] = vpc_subnet_id
if vpc_subnet_id:
params['security_group_ids'] = group_id
else:
params['security_groups'] = group_name
if volumes: if volumes:
bdm = BlockDeviceMapping() bdm = BlockDeviceMapping()
@ -1284,6 +1317,7 @@ def main():
volumes = dict(type='list'), volumes = dict(type='list'),
ebs_optimized = dict(type='bool', default=False), ebs_optimized = dict(type='bool', default=False),
tenancy = dict(default='default'), tenancy = dict(default='default'),
network_interfaces = dict(type='list', aliases=['network_interface'])
) )
) )
@ -1292,7 +1326,12 @@ def main():
mutually_exclusive = [ mutually_exclusive = [
['exact_count', 'count'], ['exact_count', 'count'],
['exact_count', 'state'], ['exact_count', 'state'],
['exact_count', 'instance_ids'] ['exact_count', 'instance_ids'],
['network_interfaces', 'assign_public_ip'],
['network_interfaces', 'group'],
['network_interfaces', 'group_id'],
['network_interfaces', 'private_ip'],
['network_interfaces', 'vpc_subnet_id'],
], ],
) )