diff --git a/.zuul.yaml b/.zuul.yaml index e839cc17..e25dd3b3 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -71,6 +71,8 @@ floating_ip_info group identity_domain_info + identity_group_info + identity_role identity_user identity_user_info identity_role diff --git a/ci/roles/identity_group_info/tasks/main.yml b/ci/roles/identity_group_info/tasks/main.yml new file mode 100644 index 00000000..16a0afa2 --- /dev/null +++ b/ci/roles/identity_group_info/tasks/main.yml @@ -0,0 +1,74 @@ +--- +- name: List group by domain_id + openstack.cloud.identity_group_info: + cloud: "{{ cloud }}" + domain: default + register: group_domain + +- name: Assert groups were returned + assert: + that: + - group_domain.groups | length > 0 + - group_domain.groups[0].domain_id == 'default' + - group_domain.groups[0].id is defined + - group_domain.groups[0].description is defined + - group_domain.groups[0].name is defined + +- name: List group by domain_id and group + openstack.cloud.identity_group_info: + cloud: "{{ cloud }}" + domain: default + name: admins + register: groups_info + +- name: Assert groups by domain_id and grouph returned + assert: + that: + - groups_info.groups | length > 0 + - groups_info.groups[0].domain_id == 'default' + - groups_info.groups[0].id is defined + - groups_info.groups[0].description is defined + - groups_info.groups[0].name is defined + +- name: List group by filter + openstack.cloud.identity_group_info: + cloud: "{{ cloud }}" + domain: default + filters: + name: admins + register: groups_filter + +- name: Assert group by filter returned + assert: + that: + - groups_filter.groups | length > 0 + - groups_filter.groups[0].domain_id == 'default' + - groups_filter.groups[0].id is defined + - groups_filter.groups[0].description is defined + - groups_filter.groups[0].name is defined + +- name: Verify returned values of group info + assert: + that: + - item in groups_info.groups[0] + loop: + - description + - domain_id + - id + - name + +- name: List group by group name + openstack.cloud.identity_group_info: + cloud: "{{ cloud }}" + name: admins + register: groups_name + +- name: Assert group by name returned + assert: + that: + - groups_name.groups | length > 0 + - groups_name.groups[0].domain_id == 'default' + - groups_name.groups[0].id is defined + - groups_name.groups[0].description is defined + - groups_name.groups[0].name is defined + - groups_name.groups[0].name == 'admins' diff --git a/ci/run-collection.yml b/ci/run-collection.yml index 6579eeb3..0413677b 100644 --- a/ci/run-collection.yml +++ b/ci/run-collection.yml @@ -17,6 +17,7 @@ when: sdk_version is version(0.28, '>=') - { role: floating_ip_info, tags: floating_ip_info } - { role: identity_domain_info, tags: identity_domain_info } + - { role: identity_group_info, tags: identity_group_info } - { role: identity_user, tags: identity_user } - { role: identity_user_info, tags: identity_user_info } - { role: identity_role, tags: identity_role } diff --git a/plugins/modules/identity_group_info.py b/plugins/modules/identity_group_info.py index 984edbe6..21f3b443 100644 --- a/plugins/modules/identity_group_info.py +++ b/plugins/modules/identity_group_info.py @@ -87,10 +87,11 @@ EXAMPLES = ''' RETURN = ''' -openstack_groups: +groups: description: Dictionary describing all the matching groups. - returned: always, but can be null - type: complex + returned: always, but can be an empty list + type: list + elements: dict contains: name: description: Name given to the group. @@ -126,26 +127,18 @@ class IdentityGroupInfoModule(OpenStackModule): def run(self): name = self.params['name'] domain = self.params['domain'] - filters = self.params['filters'] + filters = self.params['filters'] or {} + 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 = self.conn.identity.find_domain(domain) + if dom: + args['domain_id'] = dom['id'] + else: + self.fail_json(msg='Domain name or ID does not exist') - if not filters: - filters = {} - - groups = self.conn.search_groups(name, filters, domain_id=domain) + groups = self.conn.search_groups(name, filters, **args) + groups = [g.to_dict(computed=False) for g in groups] self.exit_json(changed=False, groups=groups)