mirror of
https://github.com/ansible/awx.git
synced 2026-01-10 15:32:07 -03:30
Merge pull request #10000 from sean-m-sullivan/project_update_fix
Fix project update SUMMARY Fixing bug found in #8686 Found that the on change was not triggering due to no actual changes in the Post, Set so when project update is set to true, that the wait for update is Always triggered. Also added logic from project_update to set changed status depending on if refspec changes. ISSUE TYPE Bugfix Pull Request COMPONENT NAME awx_collection AWX VERSION 19.0.0 Reviewed-by: Bianca Henderson <beeankha@gmail.com> Reviewed-by: John Westcott IV <None> Reviewed-by: Sean Sullivan <None> Reviewed-by: Alan Rominger <arominge@redhat.com>
This commit is contained in:
commit
54d50e2459
@ -204,6 +204,7 @@ def wait_for_project_update(module, last_request):
|
||||
wait = module.params.get('wait')
|
||||
timeout = module.params.get('timeout')
|
||||
interval = module.params.get('interval')
|
||||
scm_revision_original = last_request['scm_revision']
|
||||
|
||||
if 'current_update' in last_request['summary_fields']:
|
||||
running = True
|
||||
@ -229,10 +230,15 @@ def wait_for_project_update(module, last_request):
|
||||
start = time.time()
|
||||
|
||||
# Invoke wait function
|
||||
module.wait_on_url(
|
||||
result_final = module.wait_on_url(
|
||||
url=result['json']['url'], object_name=module.get_item_name(last_request), object_type='Project Update', timeout=timeout, interval=interval
|
||||
)
|
||||
|
||||
# Set Changed to correct value depending on if hash changed Also output refspec comparision
|
||||
module.json_output['changed'] = True
|
||||
if result_final['json']['scm_revision'] == scm_revision_original:
|
||||
module.json_output['changed'] = False
|
||||
|
||||
module.exit_json(**module.json_output)
|
||||
|
||||
|
||||
@ -380,10 +386,21 @@ def main():
|
||||
on_change = wait_for_project_update
|
||||
|
||||
# If the state was present and we can let the module build or update the existing project, this will return on its own
|
||||
module.create_or_update_if_needed(
|
||||
project, project_fields, endpoint='projects', item_type='project', associations=association_fields, on_create=on_change, on_update=on_change
|
||||
response = module.create_or_update_if_needed(
|
||||
project,
|
||||
project_fields,
|
||||
endpoint='projects',
|
||||
item_type='project',
|
||||
associations=association_fields,
|
||||
on_create=on_change,
|
||||
on_update=on_change,
|
||||
auto_exit=not update_project,
|
||||
)
|
||||
|
||||
if update_project:
|
||||
wait_for_project_update(module, response)
|
||||
module.exit_json(**module.json_output)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
@ -9,245 +9,241 @@
|
||||
org_name: "AWX-Collection-tests-tower_project-org-{{ lookup('password', '/dev/null chars=ascii_letters length=16') }}"
|
||||
cred_name: "AWX-Collection-tests-tower_project-cred-{{ lookup('password', '/dev/null chars=ascii_letters length=16') }}"
|
||||
|
||||
- name: Create an SCM Credential
|
||||
tower_credential:
|
||||
name: "{{ scm_cred_name }}"
|
||||
organization: Default
|
||||
kind: scm
|
||||
register: result
|
||||
- block:
|
||||
- name: Create an SCM Credential
|
||||
tower_credential:
|
||||
name: "{{ scm_cred_name }}"
|
||||
organization: Default
|
||||
kind: scm
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Create a git project without credentials without waiting
|
||||
tower_project:
|
||||
name: "{{ project_name1 }}"
|
||||
organization: Default
|
||||
scm_type: git
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
wait: false
|
||||
register: result
|
||||
- name: Create a git project without credentials and wait
|
||||
tower_project:
|
||||
name: "{{ project_name1 }}"
|
||||
organization: Default
|
||||
scm_type: git
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
wait: true
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Recreate the project to validate not changed
|
||||
tower_project:
|
||||
name: "{{ project_name1 }}"
|
||||
organization: Default
|
||||
scm_type: git
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
wait: true
|
||||
register: result
|
||||
- name: Recreate the project to validate not changed
|
||||
tower_project:
|
||||
name: "{{ project_name1 }}"
|
||||
organization: Default
|
||||
scm_type: git
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
wait: false
|
||||
register: result
|
||||
ignore_errors: true
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
|
||||
- name: Create organizations
|
||||
tower_organization:
|
||||
name: "{{ org_name }}"
|
||||
register: result
|
||||
- name: Create organizations
|
||||
tower_organization:
|
||||
name: "{{ org_name }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Create credential
|
||||
tower_credential:
|
||||
kind: scm
|
||||
name: "{{ cred_name }}"
|
||||
organization: "{{ org_name }}"
|
||||
register: result
|
||||
- name: Create credential
|
||||
tower_credential:
|
||||
kind: scm
|
||||
name: "{{ cred_name }}"
|
||||
organization: "{{ org_name }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Create a new test project in check_mode
|
||||
tower_project:
|
||||
name: "{{ project_name2 }}"
|
||||
organization: "{{ org_name }}"
|
||||
scm_type: git
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
scm_credential: "{{ cred_name }}"
|
||||
check_mode: true
|
||||
- name: Create a new test project in check_mode
|
||||
tower_project:
|
||||
name: "{{ project_name2 }}"
|
||||
organization: "{{ org_name }}"
|
||||
scm_type: git
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
scm_credential: "{{ cred_name }}"
|
||||
check_mode: true
|
||||
|
||||
- name: "Copy tower project from {{ project_name1 }}"
|
||||
tower_project:
|
||||
name: "{{ project_name2 }}"
|
||||
copy_from: "{{ project_name1 }}"
|
||||
organization: "{{ org_name }}"
|
||||
scm_type: git
|
||||
scm_credential: "{{ cred_name }}"
|
||||
state: present
|
||||
register: result
|
||||
- name: "Copy tower project from {{ project_name1 }}"
|
||||
tower_project:
|
||||
name: "{{ project_name2 }}"
|
||||
copy_from: "{{ project_name1 }}"
|
||||
organization: "{{ org_name }}"
|
||||
scm_type: git
|
||||
scm_credential: "{{ cred_name }}"
|
||||
state: present
|
||||
register: result
|
||||
|
||||
# If this fails it may be because the check_mode task actually already created
|
||||
# the project, or it could be because the module actually failed somehow
|
||||
- assert:
|
||||
that:
|
||||
- result.copied
|
||||
# If this fails it may be because the check_mode task actually already created
|
||||
# the project, or it could be because the module actually failed somehow
|
||||
- assert:
|
||||
that:
|
||||
- result.copied
|
||||
|
||||
- name: Check module fails with correct msg when given non-existing org as param
|
||||
tower_project:
|
||||
name: "{{ project_name2 }}"
|
||||
organization: Non_Existing_Org
|
||||
scm_type: git
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
scm_credential: "{{ cred_name }}"
|
||||
register: result
|
||||
ignore_errors: true
|
||||
- name: Check module fails with correct msg when given non-existing org as param
|
||||
tower_project:
|
||||
name: "{{ project_name2 }}"
|
||||
organization: Non_Existing_Org
|
||||
scm_type: git
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
scm_credential: "{{ cred_name }}"
|
||||
register: result
|
||||
ignore_errors: true
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result is failed"
|
||||
- "result is not changed"
|
||||
- "'Non_Existing_Org' in result.msg"
|
||||
- "result.total_results == 0"
|
||||
- assert:
|
||||
that:
|
||||
- "result is failed"
|
||||
- "result is not changed"
|
||||
- "'Non_Existing_Org' in result.msg"
|
||||
- "result.total_results == 0"
|
||||
|
||||
- name: Check module fails with correct msg when given non-existing credential as param
|
||||
tower_project:
|
||||
name: "{{ project_name2 }}"
|
||||
organization: "{{ org_name }}"
|
||||
scm_type: git
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
scm_credential: Non_Existing_Credential
|
||||
register: result
|
||||
ignore_errors: true
|
||||
- name: Check module fails with correct msg when given non-existing credential as param
|
||||
tower_project:
|
||||
name: "{{ project_name2 }}"
|
||||
organization: "{{ org_name }}"
|
||||
scm_type: git
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
scm_credential: Non_Existing_Credential
|
||||
register: result
|
||||
ignore_errors: true
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result is failed"
|
||||
- "result is not changed"
|
||||
- "'Non_Existing_Credential' in result.msg"
|
||||
- "result.total_results == 0"
|
||||
- assert:
|
||||
that:
|
||||
- "result is failed"
|
||||
- "result is not changed"
|
||||
- "'Non_Existing_Credential' in result.msg"
|
||||
- "result.total_results == 0"
|
||||
|
||||
- name: Create a git project without credentials without waiting
|
||||
tower_project:
|
||||
name: "{{ project_name3 }}"
|
||||
organization: Default
|
||||
scm_type: git
|
||||
scm_branch: empty_branch
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
allow_override: true
|
||||
register: result
|
||||
- name: Create a git project without credentials without waiting
|
||||
tower_project:
|
||||
name: "{{ project_name3 }}"
|
||||
organization: Default
|
||||
scm_type: git
|
||||
scm_branch: empty_branch
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
allow_override: true
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Update a git project, update the project and wait.
|
||||
tower_project:
|
||||
name: "{{ project_name3 }}"
|
||||
organization: Default
|
||||
scm_type: git
|
||||
scm_branch: empty_branch
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
allow_override: true
|
||||
wait: true
|
||||
update_project: true
|
||||
register: result
|
||||
- name: Update the project and wait. Verify not changed as no change made to repo and refspec not changed
|
||||
tower_project:
|
||||
name: "{{ project_name3 }}"
|
||||
organization: Default
|
||||
scm_type: git
|
||||
scm_branch: empty_branch
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
allow_override: true
|
||||
wait: true
|
||||
update_project: true
|
||||
register: result
|
||||
|
||||
- name: Update a git project, update the project without waiting.
|
||||
tower_project:
|
||||
name: "{{ project_name3 }}"
|
||||
organization: Default
|
||||
scm_type: git
|
||||
scm_branch: empty_branch
|
||||
scm_url: https://github.com/ansible/test-playbooks
|
||||
wait: false
|
||||
update_project: true
|
||||
register: result
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
|
||||
- name: Create a job template that overrides the project scm_branch
|
||||
tower_job_template:
|
||||
name: "{{ jt1 }}"
|
||||
project: "{{ project_name3 }}"
|
||||
inventory: "Demo Inventory"
|
||||
scm_branch: master
|
||||
playbook: debug.yml
|
||||
- name: Create a job template that overrides the project scm_branch
|
||||
tower_job_template:
|
||||
name: "{{ jt1 }}"
|
||||
project: "{{ project_name3 }}"
|
||||
inventory: "Demo Inventory"
|
||||
scm_branch: master
|
||||
playbook: debug.yml
|
||||
|
||||
- name: Launch "{{ jt1 }}"
|
||||
tower_job_launch:
|
||||
job_template: "{{ jt1 }}"
|
||||
register: result
|
||||
- name: Launch "{{ jt1 }}"
|
||||
tower_job_launch:
|
||||
job_template: "{{ jt1 }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: "wait for job {{ result.id }}"
|
||||
tower_job_wait:
|
||||
job_id: "{{ result.id }}"
|
||||
register: job
|
||||
- name: "wait for job {{ result.id }}"
|
||||
tower_job_wait:
|
||||
job_id: "{{ result.id }}"
|
||||
register: job
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- job is successful
|
||||
- assert:
|
||||
that:
|
||||
- job is successful
|
||||
|
||||
- name: Delete the test job_template
|
||||
tower_job_template:
|
||||
name: "{{ jt1 }}"
|
||||
project: "{{ project_name3 }}"
|
||||
inventory: "Demo Inventory"
|
||||
state: absent
|
||||
always:
|
||||
- name: Delete the test job_template
|
||||
tower_job_template:
|
||||
name: "{{ jt1 }}"
|
||||
project: "{{ project_name3 }}"
|
||||
inventory: "Demo Inventory"
|
||||
state: absent
|
||||
|
||||
- name: Delete the test project 3
|
||||
tower_project:
|
||||
name: "{{ project_name3 }}"
|
||||
organization: Default
|
||||
state: absent
|
||||
- name: Delete the test project 3
|
||||
tower_project:
|
||||
name: "{{ project_name3 }}"
|
||||
organization: Default
|
||||
state: absent
|
||||
|
||||
- name: Delete the test project 2
|
||||
tower_project:
|
||||
name: "{{ project_name2 }}"
|
||||
organization: "{{ org_name }}"
|
||||
state: absent
|
||||
- name: Delete the test project 2
|
||||
tower_project:
|
||||
name: "{{ project_name2 }}"
|
||||
organization: "{{ org_name }}"
|
||||
state: absent
|
||||
|
||||
- name: Delete the SCM Credential
|
||||
tower_credential:
|
||||
name: "{{ scm_cred_name }}"
|
||||
organization: Default
|
||||
kind: scm
|
||||
state: absent
|
||||
register: result
|
||||
- name: Delete the SCM Credential
|
||||
tower_credential:
|
||||
name: "{{ scm_cred_name }}"
|
||||
organization: Default
|
||||
kind: scm
|
||||
state: absent
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Delete the test project 1
|
||||
tower_project:
|
||||
name: "{{ project_name1 }}"
|
||||
organization: Default
|
||||
state: absent
|
||||
register: result
|
||||
- name: Delete the test project 1
|
||||
tower_project:
|
||||
name: "{{ project_name1 }}"
|
||||
organization: Default
|
||||
state: absent
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Delete credential
|
||||
tower_credential:
|
||||
kind: scm
|
||||
name: "{{ cred_name }}"
|
||||
organization: "{{ org_name }}"
|
||||
state: absent
|
||||
register: result
|
||||
- name: Delete credential
|
||||
tower_credential:
|
||||
kind: scm
|
||||
name: "{{ cred_name }}"
|
||||
organization: "{{ org_name }}"
|
||||
state: absent
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Delete the organization
|
||||
tower_organization:
|
||||
name: "{{ org_name }}"
|
||||
state: absent
|
||||
register: result
|
||||
- name: Delete the organization
|
||||
tower_organization:
|
||||
name: "{{ org_name }}"
|
||||
state: absent
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user