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..d92b421a --- /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.openstack_groups | length > 0 + - group_domain.openstack_groups[0].domain_id == 'default' + - group_domain.openstack_groups[0].id is defined + - group_domain.openstack_groups[0].description is defined + - group_domain.openstack_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.openstack_groups | length > 0 + - groups_info.openstack_groups[0].domain_id == 'default' + - groups_info.openstack_groups[0].id is defined + - groups_info.openstack_groups[0].description is defined + - groups_info.openstack_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.openstack_groups | length > 0 + - groups_filter.openstack_groups[0].domain_id == 'default' + - groups_filter.openstack_groups[0].id is defined + - groups_filter.openstack_groups[0].description is defined + - groups_filter.openstack_groups[0].name is defined + +- name: Verify returned values of group info + assert: + that: + - item in groups_info.openstack_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.openstack_groups | length > 0 + - groups_name.openstack_groups[0].domain_id == 'default' + - groups_name.openstack_groups[0].id is defined + - groups_name.openstack_groups[0].description is defined + - groups_name.openstack_groups[0].name is defined + - groups_name.openstack_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..68f00d73 100644 --- a/plugins/modules/identity_group_info.py +++ b/plugins/modules/identity_group_info.py @@ -89,7 +89,7 @@ EXAMPLES = ''' RETURN = ''' openstack_groups: description: Dictionary describing all the matching groups. - returned: always, but can be null + returned: always, but can be an empty list type: complex contains: name: @@ -126,27 +126,19 @@ 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) - self.exit_json(changed=False, groups=groups) + groups = self.conn.search_groups(name, filters, **args) + # groups is for backward (and forward) compatibility + self.exit_json(changed=False, groups=groups, openstack_groups=groups) def main():