Fix handling of inventory and credential options for tower_job_launch (#54967)
- Fixed issue #25017,#37567 - Add example for prompt on launch - Add integration test for prompt on launch Signed-off-by: Hideki Saito <saito@fgrep.org>
This commit is contained in:
parent
5cbac14469
commit
377fba3d76
4 changed files with 60 additions and 5 deletions
4
changelogs/fragments/tower_job_launch-options.yaml
Normal file
4
changelogs/fragments/tower_job_launch-options.yaml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
bugfixes:
|
||||||
|
- Fixed to handle arguments correctly even if inventory and credential
|
||||||
|
variables are not specified (#25017,#37567)
|
|
@ -58,11 +58,24 @@ extends_documentation_fragment: tower
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
EXAMPLES = '''
|
||||||
|
# Launch a job template
|
||||||
- name: Launch a job
|
- name: Launch a job
|
||||||
tower_job_launch:
|
tower_job_launch:
|
||||||
job_template: "My Job Template"
|
job_template: "My Job Template"
|
||||||
register: job
|
register: job
|
||||||
|
|
||||||
|
- name: Wait for job max 120s
|
||||||
|
tower_job_wait:
|
||||||
|
job_id: job.id
|
||||||
|
timeout: 120
|
||||||
|
|
||||||
|
# Launch job template with inventory and credential for prompt on launch
|
||||||
|
- name: Launch a job with inventory and credential
|
||||||
|
tower_job_launch:
|
||||||
|
job_template: "My Job Template"
|
||||||
|
inventory: "My Inventory"
|
||||||
|
credential: "My Credential"
|
||||||
|
register: job
|
||||||
- name: Wait for job max 120s
|
- name: Wait for job max 120s
|
||||||
tower_job_wait:
|
tower_job_wait:
|
||||||
job_id: job.id
|
job_id: job.id
|
||||||
|
@ -96,10 +109,10 @@ except ImportError:
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
argument_spec = dict(
|
argument_spec = dict(
|
||||||
job_template=dict(required=True),
|
job_template=dict(required=True, type='str'),
|
||||||
job_type=dict(choices=['run', 'check', 'scan']),
|
job_type=dict(choices=['run', 'check', 'scan']),
|
||||||
inventory=dict(),
|
inventory=dict(type='str', default=None),
|
||||||
credential=dict(),
|
credential=dict(type='str', default=None),
|
||||||
limit=dict(),
|
limit=dict(),
|
||||||
tags=dict(type='list'),
|
tags=dict(type='list'),
|
||||||
extra_vars=dict(type='list'),
|
extra_vars=dict(type='list'),
|
||||||
|
@ -126,8 +139,9 @@ def main():
|
||||||
for field in lookup_fields:
|
for field in lookup_fields:
|
||||||
try:
|
try:
|
||||||
name = params.pop(field)
|
name = params.pop(field)
|
||||||
result = tower_cli.get_resource(field).get(name=name)
|
if name:
|
||||||
params[field] = result['id']
|
result = tower_cli.get_resource(field).get(name=name)
|
||||||
|
params[field] = result['id']
|
||||||
except exc.NotFound as excinfo:
|
except exc.NotFound as excinfo:
|
||||||
module.fail_json(msg='Unable to launch job, {0}/{1} was not found: {2}'.format(field, name, excinfo), changed=False)
|
module.fail_json(msg='Unable to launch job, {0}/{1} was not found: {2}'.format(field, name, excinfo), changed=False)
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,18 @@
|
||||||
- "result is changed"
|
- "result is changed"
|
||||||
- "result.status == 'pending'"
|
- "result.status == 'pending'"
|
||||||
|
|
||||||
|
- name: Wait for a job template to complete
|
||||||
|
tower_job_wait:
|
||||||
|
job_id: "{{ result.id }}"
|
||||||
|
max_interval: 10
|
||||||
|
timeout: 120
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- "result is not changed"
|
||||||
|
- "result.status == 'successful'"
|
||||||
|
|
||||||
- name: Check module fails with correct msg
|
- name: Check module fails with correct msg
|
||||||
tower_job_launch:
|
tower_job_launch:
|
||||||
job_template: "Non Existing Job Template"
|
job_template: "Non Existing Job Template"
|
||||||
|
@ -21,3 +33,26 @@
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "result.msg =='Unable to launch job, job_template/Non Existing Job Template was not found: The requested object could not be found.'"
|
- "result.msg =='Unable to launch job, job_template/Non Existing Job Template was not found: The requested object could not be found.'"
|
||||||
|
|
||||||
|
- name: Create a Job Template for testing prompt on launch
|
||||||
|
tower_job_template:
|
||||||
|
name: "Demo Job Template - ask inventory and credential"
|
||||||
|
project: Demo Project
|
||||||
|
playbook: hello_world.yml
|
||||||
|
job_type: run
|
||||||
|
ask_credential: yes
|
||||||
|
ask_inventory: yes
|
||||||
|
state: present
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Launch job template with inventory and credential for prompt on launch
|
||||||
|
tower_job_launch:
|
||||||
|
job_template: "Demo Job Template - ask inventory and credential"
|
||||||
|
inventory: "Demo Inventory"
|
||||||
|
credential: "Demo Credential"
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- "result is changed"
|
||||||
|
- "result.status == 'pending'"
|
||||||
|
|
|
@ -69,6 +69,8 @@ class TowerCloudProvider(CloudProvider):
|
||||||
tower_cli_version_map = {
|
tower_cli_version_map = {
|
||||||
'3.1.5': '3.1.8',
|
'3.1.5': '3.1.8',
|
||||||
'3.2.3': '3.3.0',
|
'3.2.3': '3.3.0',
|
||||||
|
'3.3.5': '3.3.3',
|
||||||
|
'3.4.3': '3.3.3',
|
||||||
}
|
}
|
||||||
|
|
||||||
cli_version = tower_cli_version_map.get(self.version, fallback)
|
cli_version = tower_cli_version_map.get(self.version, fallback)
|
||||||
|
|
Loading…
Reference in a new issue