mirror of
https://github.com/ansible/awx.git
synced 2026-01-19 13:41:28 -03:30
This commit includes all the changes involved in converting the old Ansible Tower modules from commits in Ansible core into the AWX collection that replaces it. Also includes work needed to integrate it into the AWX processes like tests, docs, and the Makefile. Apply changes from content_collector tool Add integrated module tests operate via run_module fixture add makefile target for them Add flake8 target and fix flake8 errors Update README Make consolidated target for testing modules
173 lines
4.5 KiB
Python
173 lines
4.5 KiB
Python
#!/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 ..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.message
|
|
module.fail_json(msg='Receive Failed', **result)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|