diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-18 05:52:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-18 05:52:35 +0000 |
commit | 7fec0b69a082aaeec72fee0612766aa42f6b1b4d (patch) | |
tree | efb569b86ca4da888717f5433e757145fa322e08 /ansible_collections/openstack/cloud/plugins/modules/endpoint.py | |
parent | Releasing progress-linux version 7.7.0+dfsg-3~progress7.99u1. (diff) | |
download | ansible-7fec0b69a082aaeec72fee0612766aa42f6b1b4d.tar.xz ansible-7fec0b69a082aaeec72fee0612766aa42f6b1b4d.zip |
Merging upstream version 9.4.0+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/openstack/cloud/plugins/modules/endpoint.py')
-rw-r--r-- | ansible_collections/openstack/cloud/plugins/modules/endpoint.py | 95 |
1 files changed, 47 insertions, 48 deletions
diff --git a/ansible_collections/openstack/cloud/plugins/modules/endpoint.py b/ansible_collections/openstack/cloud/plugins/modules/endpoint.py index e7864ecf1..be7cc7c52 100644 --- a/ansible_collections/openstack/cloud/plugins/modules/endpoint.py +++ b/ansible_collections/openstack/cloud/plugins/modules/endpoint.py @@ -1,4 +1,5 @@ #!/usr/bin/python +# -*- coding: utf-8 -*- # Copyright: (c) 2017, VEXXHOST, Inc. # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) @@ -10,8 +11,9 @@ short_description: Manage OpenStack Identity service endpoints author: OpenStack Ansible SIG description: - Create, update, or delete OpenStack Identity service endpoints. If a - service with the same combination of I(service), I(interface) and I(region) - exist, the I(url) and I(state) (C(present) or C(absent)) will be updated. + service with the same combination of I(service), I(interface) and + I(region) exist, the I(url), I(enabled) and I(state) (C(present) or + C(absent)) will be updated. options: service: description: @@ -31,7 +33,8 @@ options: type: str region: description: - - Region that the service belongs to. Note that I(region_name) is used for authentication. + - ID of the region that the service belongs to. + Note that I(region) is used for authentication. type: str enabled: description: @@ -44,10 +47,6 @@ options: choices: [present, absent] default: present type: str -requirements: - - "python >= 3.6" - - "openstacksdk >= 0.13.0" - extends_documentation_fragment: - openstack.cloud.openstack ''' @@ -75,7 +74,7 @@ RETURN = ''' endpoint: description: Dictionary describing the endpoint. returned: On success when I(state) is C(present) - type: complex + type: dict contains: id: description: Endpoint ID. @@ -85,7 +84,7 @@ endpoint: description: Endpoint Interface. type: str sample: public - enabled: + is_enabled: description: Service status. type: bool sample: True @@ -93,10 +92,10 @@ endpoint: description: Links for the endpoint type: str sample: http://controller/identity/v3/endpoints/123 - region: - description: Same as C(region_id). Deprecated. + name: + description: Name of the endpoint type: str - sample: RegionOne + sample: cinder region_id: description: Region ID. type: str @@ -116,12 +115,12 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O class IdentityEndpointModule(OpenStackModule): argument_spec = dict( - service=dict(type='str', required=True), - endpoint_interface=dict(type='str', required=True, choices=['admin', 'public', 'internal']), - url=dict(type='str', required=True), - region=dict(type='str'), + service=dict(required=True), + endpoint_interface=dict(required=True, choices=['admin', 'public', 'internal']), + url=dict(required=True), + region=dict(), enabled=dict(type='bool', default=True), - state=dict(type='str', default='present', choices=['absent', 'present']), + state=dict(default='present', choices=['absent', 'present']), ) module_kwargs = dict( @@ -129,7 +128,7 @@ class IdentityEndpointModule(OpenStackModule): ) def _needs_update(self, endpoint): - if endpoint.enabled != self.params['enabled']: + if endpoint.is_enabled != self.params['enabled']: return True if endpoint.url != self.params['url']: return True @@ -151,11 +150,13 @@ class IdentityEndpointModule(OpenStackModule): service_name_or_id = self.params['service'] interface = self.params['endpoint_interface'] url = self.params['url'] - region = self.params['region'] + # Regions have IDs but do not have names + # Ref.: https://docs.openstack.org/api-ref/identity/v3/#regions + region_id = self.params['region'] enabled = self.params['enabled'] state = self.params['state'] - service = self.conn.get_service(service_name_or_id) + service = self.conn.identity.find_service(service_name_or_id) if service is None and state == 'absent': self.exit_json(changed=False) @@ -164,49 +165,47 @@ class IdentityEndpointModule(OpenStackModule): self.fail_json(msg='Service %s does not exist' % service_name_or_id) filters = dict(service_id=service.id, interface=interface) - if region is not None: - filters['region'] = region - endpoints = self.conn.search_endpoints(filters=filters) + if region_id: + filters['region_id'] = region_id + endpoints = list(self.conn.identity.endpoints(**filters)) endpoint = None if len(endpoints) > 1: self.fail_json(msg='Service %s, interface %s and region %s are ' 'not unique' % - (service_name_or_id, interface, region)) + (service_name_or_id, interface, region_id)) elif len(endpoints) == 1: endpoint = endpoints[0] if self.ansible.check_mode: self.exit_json(changed=self._system_state_change(endpoint)) + changed = False if state == 'present': - if endpoint is None: - args = {'url': url, 'interface': interface, - 'service_name_or_id': service.id, 'enabled': enabled, - 'region': region} - endpoints = self.conn.create_endpoint(**args) - # safe because endpoints contains a single item when url is - # given to self.conn.create_endpoint() - endpoint = endpoints[0] - + if not endpoint: + args = { + 'url': url, + 'interface': interface, + 'service_id': service.id, + 'enabled': enabled, + 'region_id': region_id + } + + endpoint = self.conn.identity.create_endpoint(**args) + changed = True + elif self._needs_update(endpoint): + endpoint = self.conn.identity.update_endpoint( + endpoint.id, url=url, enabled=enabled) changed = True - else: - if self._needs_update(endpoint): - endpoint = self.conn.update_endpoint( - endpoint.id, url=url, enabled=enabled) - changed = True - else: - changed = False + self.exit_json(changed=changed, - endpoint=endpoint) + endpoint=endpoint.to_dict(computed=False)) - elif state == 'absent': - if endpoint is None: - changed = False - else: - self.conn.delete_endpoint(endpoint.id) - changed = True - self.exit_json(changed=changed) + elif state == 'absent' and endpoint: + self.conn.identity.delete_endpoint(endpoint.id) + changed = True + + self.exit_json(changed=changed) def main(): |