Merge pull request #2021 from h3biomed/enis_at_launch
ec2: allow ENIs to be specified at instance launch
This commit is contained in:
commit
c4140cc6db
1 changed files with 44 additions and 5 deletions
|
@ -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'],
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue