Switch endpoint module to OpenStackModule

Change-Id: Ibd208374297342764c79ffe3968e360cc3ae004d
This commit is contained in:
Artem Goncharov 2021-05-20 17:50:45 +02:00 committed by Artem Goncharov
parent 6b3bf3bba0
commit 662ac61640

View File

@ -103,35 +103,11 @@ endpoint:
sample: True sample: True
''' '''
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, endpoint): class IdentityEndpointModule(OpenStackModule):
if endpoint.enabled != module.params['enabled']: argument_spec = dict(
return True
if endpoint.url != module.params['url']:
return True
return False
def _system_state_change(module, endpoint):
state = module.params['state']
if state == 'absent' and endpoint:
return True
if state == 'present':
if endpoint is None:
return True
return _needs_update(module, endpoint)
return False
def main():
argument_spec = openstack_full_argument_spec(
service=dict(type='str', required=True), service=dict(type='str', required=True),
endpoint_interface=dict(type='str', required=True, choices=['admin', 'public', 'internal']), endpoint_interface=dict(type='str', required=True, choices=['admin', 'public', 'internal']),
url=dict(type='str', required=True), url=dict(type='str', required=True),
@ -140,35 +116,51 @@ def main():
state=dict(type='str', default='present', choices=['absent', 'present']), state=dict(type='str', 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)
service_name_or_id = module.params['service'] def _needs_update(self, endpoint):
interface = module.params['endpoint_interface'] if endpoint.enabled != self.params['enabled']:
url = module.params['url'] return True
region = module.params['region'] if endpoint.url != self.params['url']:
enabled = module.params['enabled'] return True
state = module.params['state'] return False
sdk, cloud = openstack_cloud_from_module(module) def _system_state_change(self, endpoint):
try: state = self.params['state']
if state == 'absent' and endpoint:
return True
service = cloud.get_service(service_name_or_id) if state == 'present':
if endpoint is None:
return True
return self._needs_update(endpoint)
return False
def run(self):
service_name_or_id = self.params['service']
interface = self.params['endpoint_interface']
url = self.params['url']
region = self.params['region']
enabled = self.params['enabled']
state = self.params['state']
service = self.conn.get_service(service_name_or_id)
if service is None and state == 'absent': if service is None and state == 'absent':
module.exit_json(changed=False) self.exit_json(changed=False)
elif service is None and state == 'present': elif service is None and state == 'present':
module.fail_json(msg='Service %s does not exist' % service_name_or_id) self.fail_json(msg='Service %s does not exist' % service_name_or_id)
filters = dict(service_id=service.id, interface=interface) filters = dict(service_id=service.id, interface=interface)
if region is not None: if region is not None:
filters['region'] = region filters['region'] = region
endpoints = cloud.search_endpoints(filters=filters) endpoints = self.conn.search_endpoints(filters=filters)
if len(endpoints) > 1: if len(endpoints) > 1:
module.fail_json(msg='Service %s, interface %s and region %s are ' self.fail_json(msg='Service %s, interface %s and region %s are '
'not unique' % 'not unique' %
(service_name_or_id, interface, region)) (service_name_or_id, interface, region))
elif len(endpoints) == 1: elif len(endpoints) == 1:
@ -176,35 +168,37 @@ def main():
else: else:
endpoint = None endpoint = None
if module.check_mode: if self.ansible.check_mode:
module.exit_json(changed=_system_state_change(module, endpoint)) self.exit_json(changed=self._system_state_change(endpoint))
if state == 'present': if state == 'present':
if endpoint is None: if endpoint is None:
result = cloud.create_endpoint(service_name_or_id=service, result = self.conn.create_endpoint(
url=url, interface=interface, service_name_or_id=service, url=url, interface=interface,
region=region, enabled=enabled) region=region, enabled=enabled)
endpoint = result[0] endpoint = result[0]
changed = True changed = True
else: else:
if _needs_update(module, endpoint): if self._needs_update(endpoint):
endpoint = cloud.update_endpoint( endpoint = self.conn.update_endpoint(
endpoint.id, url=url, enabled=enabled) endpoint.id, url=url, enabled=enabled)
changed = True changed = True
else: else:
changed = False changed = False
module.exit_json(changed=changed, endpoint=endpoint) self.exit_json(changed=changed, endpoint=endpoint)
elif state == 'absent': elif state == 'absent':
if endpoint is None: if endpoint is None:
changed = False changed = False
else: else:
cloud.delete_endpoint(endpoint.id) self.conn.delete_endpoint(endpoint.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 = IdentityEndpointModule()
module()
if __name__ == '__main__': if __name__ == '__main__':