diff --git a/lib/ansible/modules/extras/cloud/amazon/ecs_cluster_facts.py b/lib/ansible/modules/extras/cloud/amazon/ecs_cluster_facts.py deleted file mode 100644 index ec1a9209ef7..00000000000 --- a/lib/ansible/modules/extras/cloud/amazon/ecs_cluster_facts.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/python -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -DOCUMENTATION = ''' ---- -module: ecs_cluster_facts -short_description: list or describe clusters or their instances in ecs -description: - - Lists or describes clusters or cluster instances in ecs. -version_added: "2.0" -options: - details: - description: - - Set this to true if you want detailed information. - required: false - default: false - cluster: - description: - - The cluster ARNS to list. - required: false - default: 'default' - instances: - description: - - The instance ARNS to list. - required: false - default: None (returns all) - option: - description: - - Whether to return information about clusters or their instances - required: false - choices: ['clusters', 'instances'] - default: 'clusters' -''' - -EXAMPLES = ''' -# Note: These examples do not set authentication details, see the AWS Guide for details. - -# Basic listing example -- ecs_task: - cluster=test-cluster - task_list=123456789012345678901234567890123456 - -# Basic example of deregistering task -- ecs_task: - state: absent - family: console-test-tdn - revision: 1 -''' -RETURN = ''' -clusters: - description: - - array of cluster ARNs when details is false - - array of dicts when details is true - sample: [ "arn:aws:ecs:us-west-2:172139249013:cluster/test-cluster" ] -''' -try: - import json, os - import boto - import botocore - HAS_BOTO = True -except ImportError: - HAS_BOTO = False - -try: - import boto3 - # import module snippets - from ansible.module_utils.ec2 import ec2_argument_spec, get_aws_connection_info, boto3_conn - HAS_BOTO3 = True -except ImportError: - HAS_BOTO3 = False - -class EcsClusterManager: - """Handles ECS Clusters""" - - def __init__(self, module): - self.module = module - - try: - region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True) - if not region: - module.fail_json(msg="Region must be specified as a parameter, in EC2_REGION or AWS_REGION environment variables or in boto configuration file") - self.ecs = boto3_conn(module, conn_type='client', resource='ecs', region=region, endpoint=ec2_url, **aws_connect_kwargs) - except boto.exception.NoAuthHandlerFound, e: - self.module.fail_json(msg="Can't authorize connection - "+str(e)) - - def list_container_instances(self, cluster): - response = self.ecs.list_container_instances(cluster=cluster) - relevant_response = dict(instances = response['containerInstanceArns']) - return relevant_response - - def describe_container_instances(self, cluster, instances): - response = self.ecs.describe_container_instances( - clusters=cluster, - containerInstances=instances.split(",") if instances else [] - ) - relevant_response = dict() - if 'containerInstances' in response and len(response['containerInstances'])>0: - relevant_response['instances'] = response['containerInstances'] - if 'failures' in response and len(response['failures'])>0: - relevant_response['instances_not_running'] = response['failures'] - return relevant_response - - def list_clusters(self): - response = self.ecs.list_clusters() - relevant_response = dict(clusters = response['clusterArns']) - return relevant_response - - def describe_clusters(self, cluster): - response = self.ecs.describe_clusters( - clusters=cluster.split(",") if cluster else [] - ) - relevant_response = dict() - if 'clusters' in response and len(response['clusters'])>0: - relevant_response['clusters'] = response['clusters'] - if 'failures' in response and len(response['failures'])>0: - relevant_response['clusters_not_running'] = response['failures'] - return relevant_response - -def main(): - - argument_spec = ec2_argument_spec() - argument_spec.update(dict( - details=dict(required=False, type='bool' ), - cluster=dict(required=False, type='str' ), - instances=dict(required=False, type='str' ), - option=dict(required=False, choices=['clusters', 'instances'], default='clusters') - )) - - module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) - - if not HAS_BOTO: - module.fail_json(msg='boto is required.') - - if not HAS_BOTO3: - module.fail_json(msg='boto3 is required.') - - show_details = False - if 'details' in module.params and module.params['details']: - show_details = True - - task_mgr = EcsClusterManager(module) - if module.params['option']=='clusters': - if show_details: - ecs_facts = task_mgr.describe_clusters(module.params['cluster']) - else: - ecs_facts = task_mgr.list_clusters() - if module.params['option']=='instances': - if show_details: - ecs_facts = task_mgr.describe_container_instances(module.params['cluster'], module.params['instances']) - else: - ecs_facts = task_mgr.list_container_instances(module.params['cluster']) - ecs_facts_result = dict(changed=False, ansible_facts=ecs_facts) - module.exit_json(**ecs_facts_result) - -# import module snippets -from ansible.module_utils.basic import * -from ansible.module_utils.urls import * - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/extras/cloud/amazon/ecs_task_facts.py b/lib/ansible/modules/extras/cloud/amazon/ecs_task_facts.py deleted file mode 100644 index 541bfaee3c1..00000000000 --- a/lib/ansible/modules/extras/cloud/amazon/ecs_task_facts.py +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/python -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -DOCUMENTATION = ''' ---- -module: ecs_task_facts -short_description: return facts about tasks in ecs -description: - - Describes or lists tasks. -version_added: 1.9 -options: - details: - description: - - Set this to true if you want detailed information about the tasks. - required: false - default: false - type: bool - cluster: - description: - - The cluster in which to list tasks if other than the 'default'. - required: false - default: 'default' - type: str - task_list: - description: - - Set this to a list of task identifiers. If 'details' is false, this is required. - required: false - family: - required: False - type: str - - container_instance: - required: False - type: 'str' - max_results: - required: False - type: 'int' - started_by: - required: False - type: 'str' - service_name: - required: False - type: 'str' - desired_status: - required: False - choices=['RUNNING', 'PENDING', 'STOPPED'] - -''' - -EXAMPLES = ''' -# Note: These examples do not set authentication details, see the AWS Guide for details. - -# Basic listing example -- ecs_task: - cluster=test-cluster - task_list=123456789012345678901234567890123456 - -# Basic example of deregistering task -- ecs_task: - state: absent - family: console-test-tdn - revision: 1 -''' -RETURN = ''' -cache_updated: - description: if the cache was updated or not - returned: success, in some cases - type: boolean - sample: True -cache_update_time: - description: time of the last cache update (0 if unknown) - returned: success, in some cases - type: datetime - sample: 1425828348000 -stdout: - description: output from apt - returned: success, when needed - type: string - sample: "Reading package lists...\nBuilding dependency tree...\nReading state information...\nThe following extra packages will be installed:\n apache2-bin ..." -stderr: - description: error output from apt - returned: success, when needed - type: string - sample: "AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to ..." -''' -try: - import json, os - import boto - import botocore - # import module snippets - from ansible.module_utils.basic import * - from ansible.module_utils.ec2 import * - HAS_BOTO = True -except ImportError: - HAS_BOTO = False - -try: - import boto3 - HAS_BOTO3 = True -except ImportError: - HAS_BOTO3 = False - -class EcsTaskManager: - """Handles ECS Tasks""" - - def __init__(self, module): - self.module = module - - try: - region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True) - if not region: - module.fail_json(msg="Region must be specified as a parameter, in EC2_REGION or AWS_REGION environment variables or in boto configuration file") - self.ecs = boto3_conn(module, conn_type='client', resource='ecs', region=region, endpoint=ec2_url, **aws_connect_kwargs) - except boto.exception.NoAuthHandlerFound, e: - self.module.fail_json(msg=str(e)) - - def transmogrify(self, params, field, dictionary, arg_name): - if field in params and params[field] is not None: - dictionary[arg_name] = params[field] - - def list_tasks(self, params): - fn_args = dict() - self.transmogrify(params, 'cluster', fn_args, 'cluster') - self.transmogrify(params, 'container_instance', fn_args, 'containerInstance') - self.transmogrify(params, 'family', fn_args, 'family') - self.transmogrify(params, 'max_results', fn_args, 'maxResults') - self.transmogrify(params, 'started_by', fn_args, 'startedBy') - self.transmogrify(params, 'service_name', fn_args, 'startedBy') - self.transmogrify(params, 'desired_status', fn_args, 'desiredStatus') - relevant_response = dict() - try: - response = self.ecs.list_tasks(**fn_args) - relevant_response['tasks'] = response['taskArns'] - except botocore.exceptions.ClientError: - relevant_response['tasks'] = [] - return relevant_response - - def describe_tasks(self, cluster_name, tasks): - response = self.ecs.describe_tasks( - cluster=cluster_name if cluster_name else '', - tasks=tasks.split(",") if tasks else [] - ) - relevant_response = dict( - tasks = response['tasks'], - tasks_not_running = response['failures']) - return relevant_response - -def main(): - - argument_spec = ec2_argument_spec() - argument_spec.update(dict( - details=dict(required=False, type='bool' ), - cluster=dict(required=False, type='str' ), - task_list = dict(required=False, type='str'), - family=dict(required= False, type='str' ), - container_instance=dict(required=False, type='str' ), - max_results=dict(required=False, type='int' ), - started_by=dict(required=False, type='str' ), - service_name=dict(required=False, type='str' ), - desired_status=dict(required=False, choices=['RUNNING', 'PENDING', 'STOPPED']) - )) - - module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) - - if not HAS_BOTO: - module.fail_json(msg='boto is required.') - - if not HAS_BOTO3: - module.fail_json(msg='boto3 is required.') - - task_to_describe = module.params['family'] - show_details = False - if 'details' in module.params and module.params['details']: - show_details = True - - task_mgr = EcsTaskManager(module) - if show_details: - if 'task_list' not in module.params or not module.params['task_list']: - module.fail_json(msg="task_list must be specified for ecs_task_facts") - ecs_facts = task_mgr.describe_tasks(module.params['cluster'], module.params['task_list']) - else: - ecs_facts = task_mgr.list_tasks(module.params) - ecs_facts_result = dict(changed=False, ansible_facts=ecs_facts) - module.exit_json(**ecs_facts_result) - -# import module snippets -from ansible.module_utils.basic import * -from ansible.module_utils.urls import * - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/extras/cloud/amazon/ecs_taskdefinition.py b/lib/ansible/modules/extras/cloud/amazon/ecs_taskdefinition.py index 9915e9d8070..4a044ed3c69 100644 --- a/lib/ansible/modules/extras/cloud/amazon/ecs_taskdefinition.py +++ b/lib/ansible/modules/extras/cloud/amazon/ecs_taskdefinition.py @@ -27,27 +27,31 @@ options: description: - State whether the task definition should exist or be deleted required: true - choices=['present', 'absent'] - + choices: ['present', 'absent'] arn: description: - The arn of the task description to delete required: false - family: - =dict(required=False, type='str' ), - + description: + - A Name that would be given to the task definition + required: false revision: + description: + - A revision number for the task definition required: False type: int - containers: + description: + - A list of containers definitions required: False type: list of dicts with container definitions - volumes: + description: + - A list of names of volumes to be attached required: False type: list of name + ''' EXAMPLES = ''' diff --git a/lib/ansible/modules/extras/cloud/amazon/ecs_taskdefinition_facts.py b/lib/ansible/modules/extras/cloud/amazon/ecs_taskdefinition_facts.py deleted file mode 100644 index c351639513f..00000000000 --- a/lib/ansible/modules/extras/cloud/amazon/ecs_taskdefinition_facts.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/python -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -DOCUMENTATION = ''' ---- -module: ecs_taskdefinition_facts -short_description: return facts about task definitions in ecs -description: - - Describes or lists task definitions. -version_added: 1.9 -requirements: [ json, os, boto, botocore, boto3 ] -options: - details: - description: - - Set this to true if you want detailed information about the tasks. - required: false - default: false - name: - description: - - When details is true, the name must be provided. - required: false - family: - description: - - the name of the family of task definitions to list. - required: false - max_results: - description: - - The maximum number of results to return. - required: false - status: - description: - - Show only task descriptions of the given status. If omitted, it shows all - required: false - choices: ['ACTIVE', 'INACTIVE'] - sort: - description: - - Sort order of returned list of task definitions - required: false - choices: ['ASC', 'DESC'] - -''' - -EXAMPLES = ''' -# Note: These examples do not set authentication details, see the AWS Guide for details. - -# Basic listing example -- name: "Get task definitions with details" - ecs_taskdefinition_facts: - name: test-cluster-tasks - details: true - -- name: Get task definitions with details - ecs_taskdefinition_facts: - status: INACTIVE - details: true - family: test-cluster-rbjgjoaj-task - name: "arn:aws:ecs:us-west-2:172139249013:task-definition/test-cluster-rbjgjoaj-task:1" -''' -RETURN = ''' -task_definitions: - description: array of ARN values for the known task definitions - type: array of string or dict if details is true - sample: ["arn:aws:ecs:us-west-2:172139249013:task-definition/console-sample-app-static:1"] -''' -try: - import json, os - import boto - import botocore - # import module snippets - from ansible.module_utils.basic import * - from ansible.module_utils.ec2 import * - HAS_BOTO = True -except ImportError: - HAS_BOTO = False - -try: - import boto3 - HAS_BOTO3 = True -except ImportError: - HAS_BOTO3 = False - -class EcsTaskManager: - """Handles ECS Tasks""" - - def __init__(self, module): - self.module = module - - try: - # self.ecs = boto3.client('ecs') - region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module, boto3=True) - if not region: - module.fail_json(msg="Region must be specified as a parameter, in EC2_REGION or AWS_REGION environment variables or in boto configuration file") - self.ecs = boto3_conn(module, conn_type='client', resource='ecs', region=region, endpoint=ec2_url, **aws_connect_kwargs) - except boto.exception.NoAuthHandlerFound, e: - self.module.fail_json(msg=str(e)) - - def transmogrify(self, params, field, dictionary, arg_name): - if field in params and params[field] is not None: - dictionary[arg_name] = params[field] - - def list_taskdefinitions(self, params): - fn_args = dict() - self.transmogrify(params, 'family', fn_args, 'familyPrefix') - self.transmogrify(params, 'max_results', fn_args, 'maxResults') - self.transmogrify(params, 'status', fn_args, 'status') - self.transmogrify(params, 'sort', fn_args, 'sort') - response = self.ecs.list_task_definitions(**fn_args) - return dict(task_definitions=response['taskDefinitionArns']) - - def describe_taskdefinition(self, task_definition): - try: - response = self.ecs.describe_task_definition(taskDefinition=task_definition) - except botocore.exceptions.ClientError: - response = dict(taskDefinition=[ dict( name=task_definition, status="MISSING")]) - relevant_response = dict( - task_definitions = response['taskDefinition'] - ) - return relevant_response - -def main(): - - argument_spec = ec2_argument_spec() - argument_spec.update(dict( - details=dict(required= False, type='bool' ), - name=dict(required=False, type='str' ), - family=dict(required=False, type='str' ), - max_results=dict(required=False, type='int' ), - status=dict(required=False, choices=['ACTIVE', 'INACTIVE']), - sort=dict(required=False, choices=['ASC', 'DESC']) - )) - - module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) - - if not HAS_BOTO: - module.fail_json(msg='boto is required.') - - if not HAS_BOTO3: - module.fail_json(msg='boto3 is required.') - - show_details = False - if 'details' in module.params and module.params['details']: - if 'name' not in module.params or not module.params['name']: - module.fail_json(msg="task definition name must be specified for ecs_taskdefinition_facts") - show_details = True - - task_mgr = EcsTaskManager(module) - if show_details: - ecs_facts = task_mgr.describe_taskdefinition(module.params['name']) - else: - ecs_facts = task_mgr.list_taskdefinitions(module.params) - ecs_facts_result = dict(changed=False, ansible_facts=ecs_facts) - module.exit_json(**ecs_facts_result) - -# import module snippets -from ansible.module_utils.basic import * -from ansible.module_utils.ec2 import * -from ansible.module_utils.urls import * - -if __name__ == '__main__': - main()