summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Westcott IV <32551173+john-westcott-iv@users.noreply.github.com>2019-01-18 06:11:17 -0500
committerJohn R Barker <john@johnrbarker.com>2019-01-18 11:11:17 +0000
commit0ce9593986278f2e1a4f479594de5fc6cbea7255 (patch)
tree616d1683f9af5e7e0a62ff735f0dcef7bad175a5
parente1b7acde875e86ed3818bc606f4c541997e27a1a (diff)
downloadansible-0ce9593986278f2e1a4f479594de5fc6cbea7255.tar.gz
Adding TowerCLI receive module (#51023)
-rw-r--r--lib/ansible/modules/web_infrastructure/ansible_tower/tower_receive.py172
-rw-r--r--test/integration/targets/tower_receive/aliases2
-rw-r--r--test/integration/targets/tower_receive/tasks/main.yml17
3 files changed, 191 insertions, 0 deletions
diff --git a/lib/ansible/modules/web_infrastructure/ansible_tower/tower_receive.py b/lib/ansible/modules/web_infrastructure/ansible_tower/tower_receive.py
new file mode 100644
index 0000000000..1bbb006737
--- /dev/null
+++ b/lib/ansible/modules/web_infrastructure/ansible_tower/tower_receive.py
@@ -0,0 +1,172 @@
+#!/usr/bin/python
+# coding: utf-8 -*-
+
+# (c) 2017, John Westcott IV <john.westcott.iv@redhat.com>
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+from __future__ import absolute_import, division, print_function
+__metaclass__ = type
+
+
+ANSIBLE_METADATA = {'metadata_version': '1.1',
+ 'status': ['preview'],
+ 'supported_by': 'community'}
+
+
+DOCUMENTATION = '''
+---
+module: tower_receive
+author: "John Westcott IV (@john-westcott-iv)"
+version_added: "2.8"
+short_description: Receive assets from Ansible Tower.
+description:
+ - Receive assets from Ansible Tower. See
+ U(https://www.ansible.com/tower) for an overview.
+options:
+ all:
+ description:
+ - Export all assets
+ type: bool
+ default: 'False'
+ organization:
+ description:
+ - List of organization names to export
+ default: []
+ user:
+ description:
+ - List of user names to export
+ default: []
+ team:
+ description:
+ - List of team names to export
+ default: []
+ credential_type:
+ description:
+ - List of credential type names to export
+ default: []
+ credential:
+ description:
+ - List of credential names to export
+ default: []
+ notification_template:
+ description:
+ - List of notification template names to export
+ default: []
+ inventory_script:
+ description:
+ - List of inventory script names to export
+ default: []
+ inventory:
+ description:
+ - List of inventory names to export
+ default: []
+ project:
+ description:
+ - List of project names to export
+ default: []
+ job_template:
+ description:
+ - List of job template names to export
+ default: []
+ workflow:
+ description:
+ - List of workflow names to export
+ default: []
+
+requirements:
+ - "ansible-tower-cli >= 3.3.0"
+
+notes:
+ - Specifying a name of "all" for any asset type will export all items of that asset type.
+
+extends_documentation_fragment: tower
+'''
+
+EXAMPLES = '''
+- name: Export all tower assets
+ tower_receive:
+ all: True
+ tower_config_file: "~/tower_cli.cfg"
+
+- name: Export all inventories
+ tower_receive:
+ inventory:
+ - all
+
+- name: Export a job template named "My Template" and all Credentials
+ tower_receive:
+ job_template:
+ - "My Template"
+ credential:
+ - all
+'''
+
+RETURN = '''
+assets:
+ description: The exported assets
+ returned: success
+ type: dict
+ sample: [ {}, {} ]
+'''
+
+from ansible.module_utils.ansible_tower import TowerModule, tower_auth_config, HAS_TOWER_CLI
+
+try:
+ from tower_cli.cli.transfer.receive import Receiver
+ from tower_cli.cli.transfer.common import SEND_ORDER
+ from tower_cli.utils.exceptions import TowerCLIError
+
+ from tower_cli.conf import settings
+ TOWER_CLI_HAS_EXPORT = True
+except ImportError:
+ TOWER_CLI_HAS_EXPORT = False
+
+
+def main():
+ argument_spec = dict(
+ all=dict(type='bool', default=False),
+ credential=dict(type='list', default=[]),
+ credential_type=dict(type='list', default=[]),
+ inventory=dict(type='list', default=[]),
+ inventory_script=dict(type='list', default=[]),
+ job_template=dict(type='list', default=[]),
+ notification_template=dict(type='list', default=[]),
+ organization=dict(type='list', default=[]),
+ project=dict(type='list', default=[]),
+ team=dict(type='list', default=[]),
+ user=dict(type='list', default=[]),
+ workflow=dict(type='list', default=[]),
+ )
+
+ module = TowerModule(argument_spec=argument_spec, supports_check_mode=False)
+
+ if not HAS_TOWER_CLI:
+ module.fail_json(msg='ansible-tower-cli required for this module')
+
+ if not TOWER_CLI_HAS_EXPORT:
+ module.fail_json(msg='ansible-tower-cli version does not support export')
+
+ export_all = module.params.get('all')
+ assets_to_export = {}
+ for asset_type in SEND_ORDER:
+ assets_to_export[asset_type] = module.params.get(asset_type)
+
+ result = dict(
+ assets=None,
+ changed=False,
+ message='',
+ )
+
+ tower_auth = tower_auth_config(module)
+ with settings.runtime_values(**tower_auth):
+ try:
+ receiver = Receiver()
+ result['assets'] = receiver.export_assets(all=export_all, asset_input=assets_to_export)
+ module.exit_json(**result)
+ except TowerCLIError as e:
+ result['message'] = e
+ module.fail_json(msg='Receive Failed', **result)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/test/integration/targets/tower_receive/aliases b/test/integration/targets/tower_receive/aliases
new file mode 100644
index 0000000000..229eebe6c9
--- /dev/null
+++ b/test/integration/targets/tower_receive/aliases
@@ -0,0 +1,2 @@
+cloud/tower
+shippable/tower/group1
diff --git a/test/integration/targets/tower_receive/tasks/main.yml b/test/integration/targets/tower_receive/tasks/main.yml
new file mode 100644
index 0000000000..9c22e6f7a7
--- /dev/null
+++ b/test/integration/targets/tower_receive/tasks/main.yml
@@ -0,0 +1,17 @@
+- name: Export all Tower assets
+ tower_receive:
+ all: True
+ register: result
+
+- assert:
+ that:
+ - "result is successful"
+
+- name: Extract names from output
+ set_fact:
+ object_names: "{{ result.assets | map(attribute='name') | list }}"
+
+- assert:
+ that:
+ - "result is successful"
+ - "'Default' in object_names"