From b31fdf8320af1a39ecee9277f90213a26b81a5b1 Mon Sep 17 00:00:00 2001 From: Rafael Castillo Date: Tue, 26 Apr 2022 16:08:33 -0700 Subject: [PATCH] Refactored identity_domain_info Switch to SDK's cloud layer function search_domains which allows us to reduce our code. Added integration test for this module. Change-Id: Ic7915fd3334266783ea5e9d442ef304fa734ca00 --- .zuul.yaml | 1 + .../identity_domain_info/defaults/main.yml | 9 +++ ci/roles/identity_domain_info/tasks/main.yml | 72 +++++++++++++++++++ ci/run-collection.yml | 1 + plugins/modules/identity_domain_info.py | 29 ++++---- 5 files changed, 97 insertions(+), 15 deletions(-) create mode 100644 ci/roles/identity_domain_info/defaults/main.yml create mode 100644 ci/roles/identity_domain_info/tasks/main.yml diff --git a/.zuul.yaml b/.zuul.yaml index 0e59a645..807ce4a5 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -70,6 +70,7 @@ dns_zone_info floating_ip_info group + identity_domain_info identity_user identity_user_info identity_role diff --git a/ci/roles/identity_domain_info/defaults/main.yml b/ci/roles/identity_domain_info/defaults/main.yml new file mode 100644 index 00000000..c67b3cbc --- /dev/null +++ b/ci/roles/identity_domain_info/defaults/main.yml @@ -0,0 +1,9 @@ +domain_name: domain_info_test_domain +unexistent_domain_name: domain_info_unexistent_domain +disabled_domain_name: test_domain_disabled +domain_info_fields: + - description + - id + - is_enabled + - name + - links diff --git a/ci/roles/identity_domain_info/tasks/main.yml b/ci/roles/identity_domain_info/tasks/main.yml new file mode 100644 index 00000000..3bb5562b --- /dev/null +++ b/ci/roles/identity_domain_info/tasks/main.yml @@ -0,0 +1,72 @@ +--- +- block: + - name: Ensure domain does not exist + openstack.cloud.identity_domain: + cloud: "{{ cloud }}" + state: absent + name: "{{ unexistent_domain_name }}" + - name: Get unexistent domain + openstack.cloud.identity_domain_info: + cloud: "{{ cloud }}" + name: "{{ unexistent_domain_name }}" + register: domain_info + - name: Assert no results returned + assert: + that: not domain_info.openstack_domains + + +- block: + - name: Ensure domain exists + openstack.cloud.identity_domain: + cloud: "{{ cloud }}" + state: present + name: "{{ domain_name }}" + description: "test description" + register: domain + - name: Get domain + openstack.cloud.identity_domain_info: + cloud: "{{ cloud }}" + name: "{{ domain_name }}" + register: domain_info + - name: Assert one result exists + assert: + that: domain_info.openstack_domains | length == 1 + - name: Assert fields are present + assert: + that: item in domain_info.openstack_domains[0] + loop: "{{ domain_info_fields }}" + - name: Assert returned value + assert: + that: + - domain_info.openstack_domains[0].description == domain.domain.description + +- block: + - name: Get all domains + openstack.cloud.identity_domain_info: + cloud: "{{ cloud }}" + register: domain_info + +- block: + - name: Ensure disabled domain exists + openstack.cloud.identity_domain: + cloud: "{{ cloud }}" + state: present + name: "{{ disabled_domain_name }}" + enabled: false + description: "test description" + register: domain + - name: Get filtered domains + openstack.cloud.identity_domain_info: + cloud: "{{ cloud }}" + filters: + enabled: true + register: domain_info + - name: Assert at least one result + assert: + that: domain_info.openstack_domains | length >= 1 + - name: Assert returned value + assert: + that: item.is_enabled == true + loop: "{{ domain_info.openstack_domains }}" + + diff --git a/ci/run-collection.yml b/ci/run-collection.yml index 0d99531b..44de1651 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_domain_info, tags: identity_domain_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_domain_info.py b/plugins/modules/identity_domain_info.py index f3dec1fd..4073c8d0 100644 --- a/plugins/modules/identity_domain_info.py +++ b/plugins/modules/identity_domain_info.py @@ -18,7 +18,7 @@ options: type: str filters: description: - - A dictionary of meta data to use for further filtering. Elements of + - A dictionary of meta data to use for filtering. Elements of this dictionary may be additional dictionaries. type: dict requirements: @@ -61,7 +61,8 @@ RETURN = ''' openstack_domains: description: has all the OpenStack information about domains returned: always, but can be null - type: complex + type: list + elements: dict contains: id: description: Unique UUID. @@ -75,10 +76,14 @@ openstack_domains: description: Description of the domain. returned: success type: str - enabled: + is_enabled: description: Flag to indicate if the domain is enabled. returned: success type: bool + links: + type: list + returned: success + description: The links related to the domain resource ''' from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule @@ -89,10 +94,8 @@ class IdentityDomainInfoModule(OpenStackModule): name=dict(required=False, default=None), filters=dict(required=False, type='dict', default=None), ) + module_kwargs = dict( - mutually_exclusive=[ - ['name', 'filters'], - ], supports_check_mode=True ) @@ -100,18 +103,14 @@ class IdentityDomainInfoModule(OpenStackModule): def run(self): name = self.params['name'] - filters = self.params['filters'] + filters = self.params['filters'] or {} + args = {} if name: - # Let's suppose user is passing domain ID - try: - domains = self.conn.get_domain(name) - except Exception: - domains = self.conn.search_domains(filters={'name': name}) - - else: - domains = self.conn.search_domains(filters) + args['name_or_id'] = name + args['filters'] = filters + domains = [d.to_dict(computed=False) for d in self.conn.search_domains(**args)] self.exit_json(changed=False, openstack_domains=domains)