65 lines
1.8 KiB
YAML
65 lines
1.8 KiB
YAML
---
|
|
- name: Get date time data
|
|
setup:
|
|
gather_subset: min
|
|
|
|
- name: Create module directory
|
|
file:
|
|
state: directory
|
|
name: "modules"
|
|
|
|
- name: Load api/v2
|
|
uri:
|
|
method: GET
|
|
url: "{{ api_url }}/api/v2/"
|
|
register: endpoints
|
|
|
|
- name: Load endpoint options
|
|
uri:
|
|
method: "OPTIONS"
|
|
url: "{{ api_url }}{{ item.value }}"
|
|
loop: "{{ endpoints['json'] | dict2items }}"
|
|
loop_control:
|
|
label: "{{ item.key }}"
|
|
register: end_point_options
|
|
when: "generate_for is not defined or item.key in generate_for"
|
|
|
|
- name: Scan POST options for different things
|
|
set_fact:
|
|
all_options: "{{ all_options | default({}) | combine(options[0]) }}"
|
|
loop: "{{ end_point_options.results }}"
|
|
vars:
|
|
options: "{{ item | json_query('json.actions.POST.[*]') }}"
|
|
loop_control:
|
|
label: "{{ item['item']['key'] }}"
|
|
when:
|
|
- item is not skipped
|
|
- options is defined
|
|
|
|
- name: Process endpoint
|
|
template:
|
|
src: "templates/tower_module.j2"
|
|
dest: "{{ playbook_dir | dirname }}/plugins/modules/{{ file_name }}"
|
|
loop: "{{ end_point_options['results'] }}"
|
|
loop_control:
|
|
label: "{{ item['item']['key'] }}"
|
|
when: "'json' in item and 'actions' in item['json'] and 'POST' in item['json']['actions']"
|
|
vars:
|
|
item_type: "{{ item['item']['key'] }}"
|
|
human_readable: "{{ item_type | replace('_', ' ') }}"
|
|
singular_item_type: "{{ item['item']['key'] | regex_replace('ies$', 'y') | regex_replace('s$', '') }}"
|
|
file_name: "tower_{% if item['item']['key'] in ['settings'] %}{{ item['item']['key'] }}{% else %}{{ singular_item_type }}{% endif %}.py"
|
|
type_map:
|
|
bool: 'bool'
|
|
boolean: 'bool'
|
|
choice: 'str'
|
|
datetime: 'str'
|
|
id: 'str'
|
|
int: 'int'
|
|
integer: 'int'
|
|
json: 'dict'
|
|
list: 'list'
|
|
object: 'dict'
|
|
password: 'str'
|
|
string: 'str'
|