Switch endpoint module to OpenStackModule
Change-Id: Ibd208374297342764c79ffe3968e360cc3ae004d
This commit is contained in:
parent
6b3bf3bba0
commit
662ac61640
@ -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__':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user