From 26b53e78b2c9bdc1b35b94d6d5412a49517aa89e Mon Sep 17 00:00:00 2001 From: Arx Cruz Date: Mon, 25 Apr 2022 22:13:06 +0200 Subject: [PATCH] Backport improvements to catalog_service - Adds tests - Update docs - Add option aliases This patch do the following: * Update catalog_service to use new openstacksdk * Add catalog_service role to test catalog_service module Change-Id: I6778f5e91cb0ead63cede28af0111d7ffbbf3ab1 (cherry picked from commit 7c7e61d36b56debccdcc02695bbe6f06010bb487) --- ci/roles/catalog_service/tasks/main.yml | 94 +++++++++++++++++++++++++ ci/run-collection.yml | 1 + plugins/modules/catalog_service.py | 47 +++++++------ 3 files changed, 121 insertions(+), 21 deletions(-) create mode 100644 ci/roles/catalog_service/tasks/main.yml diff --git a/ci/roles/catalog_service/tasks/main.yml b/ci/roles/catalog_service/tasks/main.yml new file mode 100644 index 00000000..b83e8377 --- /dev/null +++ b/ci/roles/catalog_service/tasks/main.yml @@ -0,0 +1,94 @@ +--- +- name: Delete service test + openstack.cloud.catalog_service: + cloud: "{{ cloud }}" + service_type: test + name: test + state: absent + register: service_delete + +- name: Assert changed is set to false + assert: + that: + - not service_delete.changed + +- name: Create a service for test + openstack.cloud.catalog_service: + cloud: "{{ cloud }}" + name: "test_service" + state: present + service_type: test_type + description: "Test service" + register: service_test + +- name: Verify returned values + assert: + that: + - item in service_test.service + loop: + - description + - id + - enabled + - name + - service_type + - type + +- name: Check if the service test was created successfully + openstack.cloud.catalog_service: + cloud: "{{ cloud }}" + service_type: test + name: test + register: service_created + +- name: Verify returned values + assert: + that: + - item in service_created.service + loop: + - description + - id + - enabled + - name + - type + - service_type + +- name: Update service test + openstack.cloud.catalog_service: + cloud: "{{ cloud }}" + service_type: test + description: "A new description" + is_enabled: False + name: test + register: service_test + +- name: Check if description and enabled were updated + assert: + that: + - service_test.service.description == "A new description" + - not (service_test.service.enabled|bool) + +- name: Delete service test + openstack.cloud.catalog_service: + cloud: "{{ cloud }}" + service_type: test + name: test + state: absent + register: service_deleted + +- name: Verify if service was deleted + assert: + that: + - service_deleted.changed + +- name: Delete service test again + openstack.cloud.catalog_service: + cloud: "{{ cloud }}" + service_type: test + name: test + state: absent + register: service_deleted + +- name: Assert changed is set to false + assert: + that: + - not service_deleted.changed diff --git a/ci/run-collection.yml b/ci/run-collection.yml index d30d28e0..2a1a5579 100644 --- a/ci/run-collection.yml +++ b/ci/run-collection.yml @@ -6,6 +6,7 @@ roles: - { role: address_scope, tags: address_scope } - { role: auth, tags: auth } + - { role: catalog_service, tags: catalog_service } - { role: client_config, tags: client_config } - { role: dns_zone_info, tags: dns_zone_info } - role: object_container diff --git a/plugins/modules/catalog_service.py b/plugins/modules/catalog_service.py index 967b48cd..6d1962f3 100644 --- a/plugins/modules/catalog_service.py +++ b/plugins/modules/catalog_service.py @@ -26,11 +26,13 @@ options: - Is the service enabled type: bool default: 'yes' - service_type: + aliases: ['is_enabled'] + type: description: - The type of service required: true type: str + aliases: ['service_type'] state: description: - Should the resource be present or absent. @@ -51,14 +53,14 @@ EXAMPLES = ''' cloud: mycloud state: present name: glance - service_type: image + type: image description: OpenStack Image Service # Delete a service - openstack.cloud.catalog_service: cloud: mycloud state: absent name: glance - service_type: image + type: image ''' RETURN = ''' @@ -75,6 +77,10 @@ service: description: Service name. type: str sample: "glance" + type: + description: Service type. + type: str + sample: "image" service_type: description: Service type. type: str @@ -100,9 +106,9 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O class IdentityCatalogServiceModule(OpenStackModule): argument_spec = dict( description=dict(default=None), - enabled=dict(default=True, type='bool'), + enabled=dict(default=True, aliases=['is_enabled'], type='bool'), name=dict(required=True), - service_type=dict(required=True), + type=dict(required=True, aliases=['service_type']), state=dict(default='present', choices=['absent', 'present']), ) @@ -111,11 +117,9 @@ class IdentityCatalogServiceModule(OpenStackModule): ) def _needs_update(self, service): - if service.enabled != self.params['enabled']: - return True - if service.description is not None and \ - service.description != self.params['description']: - return True + for parameter in ('enabled', 'description', 'type'): + if service[parameter] != self.params[parameter]: + return True return False def _system_state_change(self, service): @@ -135,33 +139,34 @@ class IdentityCatalogServiceModule(OpenStackModule): enabled = self.params['enabled'] name = self.params['name'] state = self.params['state'] - service_type = self.params['service_type'] + type = self.params['type'] services = self.conn.search_services( - name_or_id=name, filters=dict(type=service_type)) + name_or_id=name, filters=(dict(type=type) if type else None)) + service = None if len(services) > 1: self.fail_json( msg='Service name %s and type %s are not unique' - % (name, service_type)) + % (name, type)) elif len(services) == 1: service = services[0] - else: - service = None if self.ansible.check_mode: self.exit_json(changed=self._system_state_change(service)) + args = {'name': name, 'enabled': enabled, 'type': type} + if description: + args['description'] = description + if state == 'present': if service is None: - service = self.conn.create_service( - name=name, description=description, type=service_type, enabled=True) + service = self.conn.create_service(**args) changed = True else: if self._needs_update(service): - service = self.conn.update_service( - service.id, name=name, type=service_type, enabled=enabled, - description=description) + service = self.conn.update_service(service, + **args) changed = True else: changed = False @@ -171,7 +176,7 @@ class IdentityCatalogServiceModule(OpenStackModule): if service is None: changed = False else: - self.conn.delete_service(service.id) + self.conn.identity.delete_service(service.id) changed = True self.exit_json(changed=changed)