Switch catalog_service module to OpenStackModule

Change-Id: I77332c1af2311a472702e90f72ea9b21d385df3c
This commit is contained in:
Artem Goncharov
2021-05-20 18:41:54 +02:00
committed by Artem Goncharov
parent 6b3bf3bba0
commit 37afe5f2e6

View File

@@ -94,36 +94,11 @@ id:
sample: "3292f020780b4d5baf27ff7e1d224c44" sample: "3292f020780b4d5baf27ff7e1d224c44"
''' '''
from ansible.module_utils.basic import AnsibleModule from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import (openstack_full_argument_spec,
openstack_module_kwargs,
openstack_cloud_from_module)
def _needs_update(module, service): class IdentityCatalogServiceModule(OpenStackModule):
if service.enabled != module.params['enabled']: argument_spec = dict(
return True
if service.description is not None and \
service.description != module.params['description']:
return True
return False
def _system_state_change(module, service):
state = module.params['state']
if state == 'absent' and service:
return True
if state == 'present':
if service is None:
return True
return _needs_update(module, service)
return False
def main():
argument_spec = openstack_full_argument_spec(
description=dict(default=None), description=dict(default=None),
enabled=dict(default=True, type='bool'), enabled=dict(default=True, type='bool'),
name=dict(required=True), name=dict(required=True),
@@ -131,58 +106,79 @@ def main():
state=dict(default='present', choices=['absent', 'present']), state=dict(default='present', choices=['absent', 'present']),
) )
module_kwargs = openstack_module_kwargs() module_kwargs = dict(
module = AnsibleModule(argument_spec, supports_check_mode=True
supports_check_mode=True, )
**module_kwargs)
description = module.params['description'] def _needs_update(self, service):
enabled = module.params['enabled'] if service.enabled != self.params['enabled']:
name = module.params['name'] return True
state = module.params['state'] if service.description is not None and \
service_type = module.params['service_type'] service.description != self.params['description']:
return True
return False
sdk, cloud = openstack_cloud_from_module(module) def _system_state_change(self, service):
try: state = self.params['state']
services = cloud.search_services(name_or_id=name, if state == 'absent' and service:
filters=dict(type=service_type)) return True
if state == 'present':
if service is None:
return True
return self._needs_update(service)
return False
def run(self):
description = self.params['description']
enabled = self.params['enabled']
name = self.params['name']
state = self.params['state']
service_type = self.params['service_type']
services = self.conn.search_services(
name_or_id=name, filters=dict(type=service_type))
if len(services) > 1: if len(services) > 1:
module.fail_json(msg='Service name %s and type %s are not unique' % self.fail_json(
(name, service_type)) msg='Service name %s and type %s are not unique'
% (name, service_type))
elif len(services) == 1: elif len(services) == 1:
service = services[0] service = services[0]
else: else:
service = None service = None
if module.check_mode: if self.ansible.check_mode:
module.exit_json(changed=_system_state_change(module, service)) self.exit_json(changed=self._system_state_change(service))
if state == 'present': if state == 'present':
if service is None: if service is None:
service = cloud.create_service(name=name, description=description, service = self.conn.create_service(
type=service_type, enabled=True) name=name, description=description, type=service_type, enabled=True)
changed = True changed = True
else: else:
if _needs_update(module, service): if self._needs_update(service):
service = cloud.update_service( service = self.conn.update_service(
service.id, name=name, type=service_type, enabled=enabled, service.id, name=name, type=service_type, enabled=enabled,
description=description) description=description)
changed = True changed = True
else: else:
changed = False changed = False
module.exit_json(changed=changed, service=service, id=service.id) self.exit_json(changed=changed, service=service, id=service.id)
elif state == 'absent': elif state == 'absent':
if service is None: if service is None:
changed = False changed = False
else: else:
cloud.delete_service(service.id) self.conn.delete_service(service.id)
changed = True changed = True
module.exit_json(changed=changed) self.exit_json(changed=changed)
except sdk.exceptions.OpenStackCloudException as e:
module.fail_json(msg=str(e)) def main():
module = IdentityCatalogServiceModule()
module()
if __name__ == '__main__': if __name__ == '__main__':