From 0204bbeede8b7f24c90610a28b3b0ee2f3d88e5e Mon Sep 17 00:00:00 2001 From: Jakob Meng Date: Wed, 9 Feb 2022 07:03:22 -0700 Subject: [PATCH] Backported changes to identity_user_info from master branch Added ci integration tests and updated return value documentation. Reverted function calls which would break backward compatibility with previous collection releases. Change-Id: I99e98a529ce74ff2ca77a67d09f188228e6a0e37 (cherry picked from commit 2df07f3523ba3281d84c93083bc3b5d1791afb4b) --- ci/roles/identity_user_info/defaults/main.yml | 9 +++ ci/roles/identity_user_info/tasks/main.yml | 69 +++++++++++++++++++ ci/run-collection.yml | 1 + plugins/modules/identity_user_info.py | 45 ++++++------ 4 files changed, 101 insertions(+), 23 deletions(-) create mode 100644 ci/roles/identity_user_info/defaults/main.yml create mode 100644 ci/roles/identity_user_info/tasks/main.yml diff --git a/ci/roles/identity_user_info/defaults/main.yml b/ci/roles/identity_user_info/defaults/main.yml new file mode 100644 index 00000000..4961e3d6 --- /dev/null +++ b/ci/roles/identity_user_info/defaults/main.yml @@ -0,0 +1,9 @@ +os_expected_user_info_fields: + - default_project_id + - description + - domain_id + - email + - enabled + - id + - name + - username diff --git a/ci/roles/identity_user_info/tasks/main.yml b/ci/roles/identity_user_info/tasks/main.yml new file mode 100644 index 00000000..bc5c2c90 --- /dev/null +++ b/ci/roles/identity_user_info/tasks/main.yml @@ -0,0 +1,69 @@ +- name: Ensure user does not exist before tests + openstack.cloud.identity_user: + cloud: "{{ cloud }}" + state: absent + name: ansible_user + +- block: + - name: Get unexistent user + openstack.cloud.identity_user_info: + cloud: "{{ cloud }}" + name: ansible_user + register: userinfo + - name: Ensure nothing was returned + assert: + that: not userinfo.openstack_users + +- block: + - name: Create user + openstack.cloud.identity_user: + cloud: "{{ cloud }}" + state: present + name: ansible_user + password: secret + email: ansible.user@nowhere.net + domain: default + default_project: demo + register: user + - name: Create second user + openstack.cloud.identity_user: + cloud: "{{ cloud }}" + state: present + name: ansible_user2 + password: secret + email: ansible.user2@nowhere.net + domain: default + default_project: demo + register: user + - name: Get first user info + openstack.cloud.identity_user_info: + cloud: "{{ cloud }}" + name: ansible_user + register: userinfo + - name: Assert only one result exists + assert: + that: "{{ userinfo.openstack_users | length }} == 1" + - name: Assert userinfo has fields + assert: + that: item in userinfo.openstack_users[0] + loop: "{{ os_expected_user_info_fields }}" + +- block: + - name: Get all users + openstack.cloud.identity_user_info: + cloud: "{{ cloud }}" + register: userinfo + - name: Assert results were returned + assert: + that: "{{ userinfo.openstack_users | length }} > 0" + +- name: Post-test cleanup + block: + - name: Ensure users do not exist + openstack.cloud.identity_user: + cloud: "{{ cloud }}" + state: absent + name: "{{ item }}" + loop: + - ansible_user + - ansible_user2 diff --git a/ci/run-collection.yml b/ci/run-collection.yml index 16cd5e41..4a80e3cf 100644 --- a/ci/run-collection.yml +++ b/ci/run-collection.yml @@ -16,6 +16,7 @@ tags: dns when: sdk_version is version(0.28, '>=') - { role: floating_ip_info, tags: floating_ip_info } + - { role: identity_user_info, tags: identity_user_info } - { role: identity_role, tags: identity_role } - { role: image, tags: image } - { role: keypair, tags: keypair } diff --git a/plugins/modules/identity_user_info.py b/plugins/modules/identity_user_info.py index ee48a9c1..c0e0d949 100644 --- a/plugins/modules/identity_user_info.py +++ b/plugins/modules/identity_user_info.py @@ -74,8 +74,9 @@ EXAMPLES = ''' RETURN = ''' openstack_users: description: has all the OpenStack information about users - returned: always, but can be null - type: complex + returned: always + type: list + elements: dict contains: id: description: Unique UUID. @@ -85,22 +86,26 @@ openstack_users: description: Username of the user. returned: success type: str - enabled: - description: Flag to indicate if the user is enabled - returned: success - type: bool - domain_id: - description: Domain ID containing the user - returned: success - type: str default_project_id: description: Default project ID of the user returned: success type: str + description: + description: The description of this user + returned: success + type: str + domain_id: + description: Domain ID containing the user + returned: success + type: str email: description: Email of the user returned: success type: str + enabled: + description: Flag to indicate if the user is enabled + returned: success + type: bool username: description: Username with Identity API v2 (OpenStack Pike or earlier) else Null returned: success @@ -127,21 +132,15 @@ class IdentityUserInfoModule(OpenStackModule): domain = self.params['domain'] filters = self.params['filters'] + args = {} if domain: - try: - # We assume admin is passing domain id - dom = self.conn.get_domain(domain)['id'] - domain = dom - except Exception: - # If we fail, maybe admin is passing a domain name. - # Note that domains have unique names, just like id. - dom = self.conn.search_domains(filters={'name': domain}) - if dom: - domain = dom[0]['id'] - else: - self.fail_json(msg='Domain name or ID does not exist') + dom_obj = self.conn.identity.find_domain(domain) + if dom_obj is None: + self.fail_json( + msg="Domain name or ID '{0}' does not exist".format(domain)) + args['domain_id'] = dom_obj.id - users = self.conn.search_users(name, filters, domain_id=domain) + users = self.conn.search_users(name, filters, **args) self.exit_json(changed=False, openstack_users=users)