diff --git a/ci/roles/endpoint/tasks/main.yml b/ci/roles/endpoint/tasks/main.yml index 24cfc44e..ebcf6719 100644 --- a/ci/roles/endpoint/tasks/main.yml +++ b/ci/roles/endpoint/tasks/main.yml @@ -1,5 +1,5 @@ --- -- name: Create a service for compute +- name: Create a service endpoint for compute openstack.cloud.endpoint: cloud: "{{ cloud }}" service: nova @@ -9,7 +9,7 @@ state: present register: endpoint_test -- name: Ensure service was created +- name: Ensure service endpoint was created assert: that: - endpoint_test.endpoint.id is defined @@ -19,7 +19,7 @@ that: - endpoint_test.endpoint.url == "http://controller:9292" -- name: Create service for compute again +- name: Create service endpoint for compute again openstack.cloud.endpoint: cloud: "{{ cloud }}" service: nova @@ -34,7 +34,7 @@ that: - not endpoint_again.changed -- name: Update endpoint url +- name: Update service endpoint url openstack.cloud.endpoint: cloud: "{{ cloud }}" service: nova @@ -44,12 +44,12 @@ state: present register: endpoint_updated -- name: Ensure endpoint was updated +- name: Ensure service endpoint was updated assert: that: - endpoint_updated.endpoint.url == "http://controller:9393" -- name: Delete endpoint +- name: Delete service endpoint openstack.cloud.endpoint: cloud: "{{ cloud }}" service: nova @@ -59,7 +59,7 @@ state: absent register: endpoint_deleted -- name: Ensure endpoint was deleted +- name: Ensure service endpoint was deleted assert: that: - endpoint_deleted.changed diff --git a/plugins/modules/endpoint.py b/plugins/modules/endpoint.py index b6dd59b5..c904ae21 100644 --- a/plugins/modules/endpoint.py +++ b/plugins/modules/endpoint.py @@ -10,8 +10,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 +32,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: @@ -151,7 +153,9 @@ 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'] @@ -164,46 +168,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_id'] = region + 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_id': service.id, 'enabled': enabled, - 'region_id': region} - endpoint = self.conn.identity.create_endpoint(**args) + 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 - else: - if self._needs_update(endpoint): - endpoint = self.conn.identity.update_endpoint( - endpoint.id, url=url, enabled=enabled) - changed = True - else: - changed = False + elif self._needs_update(endpoint): + endpoint = self.conn.identity.update_endpoint( + endpoint.id, url=url, enabled=enabled) + changed = True + self.exit_json(changed=changed, endpoint=endpoint.to_dict(computed=False)) - elif state == 'absent': - if endpoint is None: - changed = False - else: - self.conn.identity.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():