diff --git a/awx_collection/plugins/module_utils/tower_api.py b/awx_collection/plugins/module_utils/tower_api.py index a3d6faa4b8..d95ca64f94 100644 --- a/awx_collection/plugins/module_utils/tower_api.py +++ b/awx_collection/plugins/module_utils/tower_api.py @@ -107,7 +107,7 @@ class TowerAPIModule(TowerModule): def get_one_by_name_or_id(self, endpoint, name_or_id): name_field = 'name' - if endpoint is 'users': + if endpoint == 'users': name_field = 'username' query_params = {'or__{0}'.format(name_field): name_or_id} @@ -118,12 +118,16 @@ class TowerAPIModule(TowerModule): pass response = self.get_endpoint(endpoint, **{'data': query_params}) + if response['status_code'] != 200: + self.fail_json(msg="Failed to query endpoint {0} for {1} {2} ({3}), see results".format(endpoint, name_field, name_or_id, response['status_code']), resuls=response) + if response['json']['count'] == 1: return response['json']['results'][0] elif response['json']['count'] == 2: for tower_object in response['json']['results']: - return tower_object - # We shouldn't get here because we found 2 objects and ID has to be unique, so one of the objects must have a matching name + if tower_object['name'] == name_or_id: + return tower_object + # We shouldn't get here because we found 2 objects and ID has to be unique, so one of the objects must have a matching name elif response['json']['count'] == 0: self.fail_json(msg="The {0} {1} was not found on the Tower server".format(endpoint, name_or_id)) else: diff --git a/awx_collection/tests/integration/targets/tower_role/tasks/main.yml b/awx_collection/tests/integration/targets/tower_role/tasks/main.yml index f0c26a7e04..4102a11402 100644 --- a/awx_collection/tests/integration/targets/tower_role/tasks/main.yml +++ b/awx_collection/tests/integration/targets/tower_role/tasks/main.yml @@ -1,74 +1,112 @@ --- +- name: Generate a test id + set_fact: + test_id: "{{ lookup('password', '/dev/null chars=ascii_letters length=16') }}" + - name: Generate names set_fact: - username: "AWX-Collection-tests-tower_role-user-{{ lookup('password', '/dev/null chars=ascii_letters length=16') }}" + username: "AWX-Collection-tests-tower_role-user-{{ test_id }}" + project_name: "AWX-Collection-tests-tower_role-project-{{ test_id }}" -- name: Create a User - tower_user: - first_name: Joe - last_name: User - username: "{{ username }}" - password: "{{ 65535 | random | to_uuid }}" - email: joe@example.org - state: present - register: result +- block: + - name: Create a User + tower_user: + first_name: Joe + last_name: User + username: "{{ username }}" + password: "{{ 65535 | random | to_uuid }}" + email: joe@example.org + state: present + register: result -- assert: - that: - - "result is changed" + - assert: + that: + - "result is changed" -- name: Add Joe to the update role of the default Project - tower_role: - user: "{{ username }}" - role: update - project: Demo Project - state: "{{ item }}" - register: result - with_items: - - "present" - - "absent" + - name: Create a project + tower_project: + name: "{{ project_name }}" + organization: Default + scm_type: git + scm_url: https://github.com/ansible/test-playbooks + wait: false + register: project_info -- assert: - that: - - "result is changed" + - assert: + that: + - project_info is changed -- name: Create a workflow - tower_workflow_job_template: - name: test-role-workflow - organization: Default - state: present + - name: Add Joe to the update role of the default Project + tower_role: + user: "{{ username }}" + role: update + project: "Demo Project" + state: "{{ item }}" + register: result + with_items: + - "present" + - "absent" -- name: Add Joe to workflow execute role - tower_role: - user: "{{ username }}" - role: execute - workflow: test-role-workflow - state: present - register: result + - assert: + that: + - "result is changed" -- assert: - that: - - "result is changed" + - name: Add Joe to the new project by ID + tower_role: + user: "{{ username }}" + role: update + project: "{{ project_info['id'] }}" + state: "{{ item }}" + register: result + with_items: + - "present" + - "absent" -- name: Add Joe to workflow execute role, no-op - tower_role: - user: "{{ username }}" - role: execute - workflow: test-role-workflow - state: present - register: result + - assert: + that: + - "result is changed" -- assert: - that: - - "result is not changed" + - name: Create a workflow + tower_workflow_job_template: + name: test-role-workflow + organization: Default + state: present -- name: Delete a User - tower_user: - username: "{{ username }}" - email: joe@example.org - state: absent - register: result + - name: Add Joe to workflow execute role + tower_role: + user: "{{ username }}" + role: execute + workflow: test-role-workflow + state: present + register: result -- assert: - that: - - "result is changed" + - assert: + that: + - "result is changed" + + - name: Add Joe to workflow execute role, no-op + tower_role: + user: "{{ username }}" + role: execute + workflow: test-role-workflow + state: present + register: result + + - assert: + that: + - "result is not changed" + + always: + - name: Delete a User + tower_user: + username: "{{ username }}" + email: joe@example.org + state: absent + register: result + + - name: Delete the project + tower_project: + name: "{{ project_name }}" + organization: Default + state: absent + register: result