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 7c7e61d36b)
This commit is contained in:
Arx Cruz
2022-04-25 22:13:06 +02:00
committed by Jakob Meng
parent b8c2310963
commit 26b53e78b2
3 changed files with 121 additions and 21 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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)