Initial converstion of tower_label

This commit is contained in:
John Westcott IV
2020-03-20 10:18:27 -04:00
committed by beeankha
parent 5573e1c7ce
commit 1daeec356f

View File

@@ -1,6 +1,7 @@
#!/usr/bin/python #!/usr/bin/python
# coding: utf-8 -*- # coding: utf-8 -*-
# (c) 2017, Wayne Witzel III <wayne@riotousliving.com> # (c) 2017, Wayne Witzel III <wayne@riotousliving.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
@@ -12,97 +13,92 @@ ANSIBLE_METADATA = {'metadata_version': '1.1',
'status': ['preview'], 'status': ['preview'],
'supported_by': 'community'} 'supported_by': 'community'}
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
module: tower_label module: tower_label
author: "Wayne Witzel III (@wwitzel3)" author: "Wayne Witzel III (@wwitzel3)"
version_added: "2.3" version_added: "2.3"
short_description: create, update, or destroy Ansible Tower label. short_description: create, update, or destroy Ansible Tower labels.
description: description:
- Create, update, or destroy Ansible Tower labels. See - Create, update, or destroy Ansible Tower labels. See
U(https://www.ansible.com/tower) for an overview. U(https://www.ansible.com/tower) for an overview.
options: options:
name: name:
description: description:
- Name to use for the label. - Name of this label.
required: True
type: str
new_name:
description:
- Setting this option will change the existing name (looked up via the name field).
required: True required: True
type: str type: str
organization: organization:
description: description:
- Organization the label should be applied to. - Organization this label belongs to.
required: True required: True
type: str type: str
state: tower_oauthtoken:
description: description:
- Desired state of the resource. - The Tower OAuth token to use.
default: "present" required: False
choices: ["present", "absent"]
type: str type: str
version_added: "3.7"
requirements:
- ansible-tower-cli >= 3.0.2
extends_documentation_fragment: awx.awx.auth extends_documentation_fragment: awx.awx.auth
note: Labels can only be created via the Tower API, they can not be deleted. Once they are fully disassociated the API will clean them up on its own.
''' '''
EXAMPLES = ''' EXAMPLES = '''
- name: Add label to tower organization - name: Add label to tower organization
tower_label: tower_label:
name: Custom Label name: Custom Label
organization: My Organization organization: My Organization
state: present
tower_config_file: "~/tower_cli.cfg"
''' '''
from ..module_utils.ansible_tower import TowerModule, tower_auth_config, tower_check_mode from ..module_utils.tower_api import TowerModule
try:
import tower_cli
import tower_cli.exceptions as exc
from tower_cli.conf import settings
except ImportError:
pass
def main(): def main():
# Any additional arguments that are not fields of the item can be added here
argument_spec = dict( argument_spec = dict(
name=dict(required=True), name=dict(required=True, type='str'),
organization=dict(required=True), new_name=dict(required=False, type='str'),
state=dict(choices=['present', 'absent'], default='present'), organization=dict(required=True, type='str'),
) )
# Create a module for ourselves
module = TowerModule(argument_spec=argument_spec, supports_check_mode=True) module = TowerModule(argument_spec=argument_spec, supports_check_mode=True)
# Extract our parameters
name = module.params.get('name') name = module.params.get('name')
new_name = module.params.get("new_name")
organization = module.params.get('organization') organization = module.params.get('organization')
state = module.params.get('state')
json_output = {'label': name, 'state': state} # Attempt to look up the related items the user specified (these will fail the module if not found)
organization_id = None
if organization:
organization_id = module.resolve_name_to_id('organizations', organization)
tower_auth = tower_auth_config(module) # Attempt to look up an existing item based on the provided data
with settings.runtime_values(**tower_auth): existing_item = module.get_one('labels', **{
tower_check_mode(module) 'data': {
label = tower_cli.get_resource('label') 'name': name,
'organization': organization_id,
}
})
try: # Create the data that gets sent for create and update
org_res = tower_cli.get_resource('organization') new_fields = {}
org = org_res.get(name=organization) new_fields['name'] = new_name if new_name else name
if organization != None:
new_fields['organization'] = organization_id
if state == 'present': module.create_or_update_if_needed(
result = label.modify(name=name, organization=org['id'], create_on_missing=True) existing_item, new_fields,
json_output['id'] = result['id'] endpoint='labels', item_type='label',
elif state == 'absent': associations={
result = label.delete(name=name, organization=org['id']) }
except (exc.NotFound) as excinfo: )
module.fail_json(msg='Failed to update label, organization not found: {0}'.format(excinfo), changed=False)
except (exc.ConnectionError, exc.BadRequest, exc.AuthError) as excinfo:
module.fail_json(msg='Failed to update label: {0}'.format(excinfo), changed=False)
json_output['changed'] = result['changed']
module.exit_json(**json_output)
if __name__ == '__main__': if __name__ == '__main__':