From cfa8ce767baaf02215bf5c0f6d4a502b02516018 Mon Sep 17 00:00:00 2001 From: Rob Date: Tue, 20 Dec 2016 05:16:35 +1100 Subject: [PATCH] =?UTF-8?q?Add=20new=20parameters=20to=20taskdefinition=20?= =?UTF-8?q?module=20-=20network=5Fmode=20and=20task=5Fr=E2=80=A6=20(#19493?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add new parameters to taskdefinition module - network_mode and task_role_arn * Add version_added field for doco * Change version_added parameter to 2.3 --- .../cloud/amazon/ecs_taskdefinition.py | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/lib/ansible/modules/cloud/amazon/ecs_taskdefinition.py b/lib/ansible/modules/cloud/amazon/ecs_taskdefinition.py index 6a24859ea7..7fa6669c45 100644 --- a/lib/ansible/modules/cloud/amazon/ecs_taskdefinition.py +++ b/lib/ansible/modules/cloud/amazon/ecs_taskdefinition.py @@ -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()