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:
softwarefactory-project-zuul[bot] 2021-04-27 16:53:01 +00:00 committed by GitHub
commit 54d50e2459
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 222 additions and 209 deletions

View File

@ -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()

View File

@ -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