@ -51,6 +51,18 @@ options:
- A list of containers definitions
required : False
type : list of dicts with container definitions
network_mode :
description :
- The Docker networking mode to use for the containers in the task .
required : false
default : bridge
choices : [ ' bridge ' , ' host ' , ' none ' ]
version_added : 2.3
task_role_arn :
description :
- The Amazon Resource Name ( ARN ) of the IAM role that containers in this task can assume . All containers in this task are granted the permissions that are specified in this role .
required : false
version_added : 2.3
volumes :
description :
- A list of names of volumes to be attached
@ -137,7 +149,7 @@ class EcsTaskManager:
except botocore . exceptions . ClientError :
return None
def register_task ( self , family , container_definitions, volumes ) :
def register_task ( self , family , task_role_arn, network_mode , container_definitions, volumes ) :
validated_containers = [ ]
# Ensures the number parameters are int as required by boto
@ -154,8 +166,15 @@ class EcsTaskManager:
validated_containers . append ( container )
response = self . ecs . register_task_definition ( family = family ,
containerDefinitions = validated_containers , volumes = volumes )
try :
response = self . ecs . register_task_definition ( family = family ,
taskRoleArn = task_role_arn ,
networkMode = network_mode ,
containerDefinitions = container_definitions ,
volumes = volumes )
except botocore . exceptions . ClientError as e :
self . module . fail_json ( msg = e . message , * * camel_dict_to_snake_dict ( e . response ) )
return response [ ' taskDefinition ' ]
def describe_task_definitions ( self , family ) :
@ -189,6 +208,7 @@ class EcsTaskManager:
response = self . ecs . deregister_task_definition ( taskDefinition = taskArn )
return response [ ' taskDefinition ' ]
def main ( ) :
argument_spec = ec2_argument_spec ( )
@ -198,8 +218,9 @@ def main():
family = dict ( required = False , type = ' str ' ) ,
revision = dict ( required = False , type = ' int ' ) ,
containers = dict ( required = False , type = ' list ' ) ,
volumes = dict ( required = False , type = ' list ' )
) )
network_mode = dict ( required = False , default = ' bridge ' , choices = [ ' bridge ' , ' host ' , ' none ' ] , type = ' str ' ) ,
task_role_arn = dict ( required = False , default = ' ' , type = ' str ' ) ,
volumes = dict ( required = False , type = ' list ' ) ) )
module = AnsibleModule ( argument_spec = argument_spec , supports_check_mode = True )
@ -325,7 +346,10 @@ def main():
# Doesn't exist. create it.
volumes = module . params . get ( ' volumes ' , [ ] ) or [ ]
results [ ' taskdefinition ' ] = task_mgr . register_task ( module . params [ ' family ' ] ,
module . params [ ' containers ' ] , volumes )
module . params [ ' task_role_arn ' ] ,
module . params [ ' network_mode ' ] ,
module . params [ ' containers ' ] ,
volumes )
results [ ' changed ' ] = True
elif module . params [ ' state ' ] == ' absent ' :
@ -355,6 +379,5 @@ def main():
module . exit_json ( * * results )
if __name__ == ' __main__ ' :
main ( )