Add network_interfaces parameter to ec2 module to support launch-time ENIs
This commit is contained in:
parent
b3262479e9
commit
df713192b4
1 changed files with 32 additions and 4 deletions
|
@ -237,6 +237,13 @@ options:
|
|||
required: false
|
||||
default: null
|
||||
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: []
|
||||
|
||||
author:
|
||||
- "Tim Gerla (@tgerla)"
|
||||
|
@ -823,11 +830,21 @@ def create_instances(module, ec2, vpc, override_count=None):
|
|||
count_tag = module.params.get('count_tag')
|
||||
source_dest_check = module.boolean(module.params.get('source_dest_check'))
|
||||
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
|
||||
if group_id and group_name:
|
||||
module.fail_json(msg = str("Use only one type of parameter (group_name) or (group_id)"))
|
||||
|
||||
if (network_interfaces and
|
||||
(assign_public_ip or private_ip or vpc_subnet_id
|
||||
or group_name or group_id)):
|
||||
module.fail_json(
|
||||
msg=str("network_interfaces must not be set when specifying " +
|
||||
"assign_public_ip, private_ip, vpc_subnet_id, group, " +
|
||||
"or group_id, which are used to create a new network " +
|
||||
"interface."))
|
||||
|
||||
vpc_id = None
|
||||
if vpc_subnet_id:
|
||||
if not vpc:
|
||||
|
@ -923,11 +940,21 @@ def create_instances(module, ec2, vpc, override_count=None):
|
|||
interfaces = boto.ec2.networkinterface.NetworkInterfaceCollection(interface)
|
||||
params['network_interfaces'] = interfaces
|
||||
else:
|
||||
params['subnet_id'] = vpc_subnet_id
|
||||
if vpc_subnet_id:
|
||||
params['security_group_ids'] = group_id
|
||||
if 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:
|
||||
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:
|
||||
bdm = BlockDeviceMapping()
|
||||
|
@ -1281,6 +1308,7 @@ def main():
|
|||
volumes = dict(type='list'),
|
||||
ebs_optimized = dict(type='bool', default=False),
|
||||
tenancy = dict(default='default'),
|
||||
network_interfaces = dict(type='list')
|
||||
)
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue