| # Copyright (c) 2022 VEXXHOST, Inc. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may |
| # not use this file except in compliance with the License. You may obtain |
| # a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations |
| # under the License. |
| |
| - name: Uninstall the legacy HelmRelease |
| run_once: true |
| block: |
| - name: Suspend the existing HelmRelease |
| failed_when: false |
| kubernetes.core.k8s: |
| state: patched |
| api_version: helm.toolkit.fluxcd.io/v2beta1 |
| kind: HelmRelease |
| name: "{{ keystone_helm_release_name }}" |
| namespace: "{{ keystone_helm_release_namespace }}" |
| definition: |
| spec: |
| suspend: true |
| |
| - name: Remove the existing HelmRelease |
| failed_when: false |
| kubernetes.core.k8s: |
| state: absent |
| api_version: helm.toolkit.fluxcd.io/v2beta1 |
| kind: HelmRelease |
| name: "{{ keystone_helm_release_name }}" |
| namespace: "{{ keystone_helm_release_namespace }}" |
| |
| - name: Create Keycloak realms |
| run_once: true |
| delegate_to: localhost |
| changed_when: false |
| community.general.keycloak_realm: |
| # Keycloak settings |
| auth_keycloak_url: "{{ item.keycloak_server_url }}" |
| auth_realm: "{{ item.keycloak_user_realm_name }}" |
| auth_client_id: "{{ item.keycloak_admin_client_id }}" |
| auth_username: "{{ item.keycloak_admin_user }}" |
| auth_password: "{{ item.keycloak_admin_password }}" |
| validate_certs: "{{ cluster_issuer_type != 'self-signed' }}" |
| # Realm settings |
| id: "{{ item.keycloak_realm }}" |
| realm: "{{ item.keycloak_realm }}" |
| display_name: "{{ item.label }}" |
| enabled: true |
| loop: "{{ keystone_domains }}" |
| loop_control: |
| label: "{{ item.name }}" |
| |
| - name: Create ConfigMap with all OpenID connect configurations |
| run_once: true |
| kubernetes.core.k8s: |
| template: configmap-openid-metadata.yml.j2 |
| |
| - name: Create Keycloak clients |
| run_once: true |
| delegate_to: localhost |
| community.general.keycloak_client: |
| # Keycloak settings |
| auth_keycloak_url: "{{ item.keycloak_server_url }}" |
| auth_realm: "{{ item.keycloak_user_realm_name }}" |
| auth_client_id: "{{ item.keycloak_admin_client_id }}" |
| auth_username: "{{ item.keycloak_admin_user }}" |
| auth_password: "{{ item.keycloak_admin_password }}" |
| validate_certs: "{{ cluster_issuer_type != 'self-signed' }}" |
| # Realm settings |
| realm: "{{ item.keycloak_realm }}" |
| client_id: "{{ item.keycloak_client_id }}" |
| secret: "{{ item.keycloak_client_secret }}" |
| redirect_uris: |
| - "{{ keystone_oidc_redirect_uri }}" |
| - "https://{{ openstack_helm_endpoints_horizon_api_host }}/auth/logout/" |
| loop: "{{ keystone_domains }}" |
| loop_control: |
| label: "{{ item.name }}" |
| |
| - name: Deploy Helm chart |
| run_once: true |
| kubernetes.core.helm: |
| name: "{{ keystone_helm_release_name }}" |
| chart_ref: "{{ keystone_helm_chart_ref }}" |
| release_namespace: "{{ keystone_helm_release_namespace }}" |
| create_namespace: true |
| kubeconfig: /etc/kubernetes/admin.conf |
| values: "{{ _keystone_helm_values | combine(keystone_helm_values, recursive=True) }}" |
| |
| - name: Create Ingress |
| ansible.builtin.include_role: |
| name: openstack_helm_ingress |
| vars: |
| openstack_helm_ingress_endpoint: identity |
| openstack_helm_ingress_service_name: keystone-api |
| openstack_helm_ingress_service_port: 5000 |
| openstack_helm_ingress_annotations: "{{ keystone_ingress_annotations }}" |
| |
| - name: Create Keystone domains |
| run_once: true |
| delegate_to: localhost |
| vexxhost.atmosphere.identity_domain: |
| name: "{{ item.name }}" |
| register: keystone_domains_result |
| loop: "{{ keystone_domains }}" |
| loop_control: |
| label: "{{ item.name }}" |
| |
| - name: Create Keystone identity providers |
| run_once: true |
| delegate_to: localhost |
| vexxhost.atmosphere.federation_idp: |
| name: "{{ item.domain.name }}" |
| domain_id: "{{ item.domain.id }}" |
| remote_ids: |
| - "{{ item.item | vexxhost.atmosphere.issuer_from_domain }}" |
| loop: "{{ keystone_domains_result.results }}" |
| loop_control: |
| label: "{{ item.domain.name }}" |
| |
| - name: Create Keystone federation mappings |
| run_once: true |
| delegate_to: localhost |
| vexxhost.atmosphere.federation_mapping: |
| name: "{{ item.name }}-openid" |
| rules: |
| - local: |
| - user: |
| type: local |
| id: "{0}" |
| domain: |
| name: "{{ item.name }}" |
| remote: |
| - type: OIDC-sub |
| loop: "{{ keystone_domains }}" |
| loop_control: |
| label: "{{ item.name }}" |
| |
| - name: Create Keystone federation protocols |
| run_once: true |
| delegate_to: localhost |
| vexxhost.atmosphere.keystone_federation_protocol: |
| name: openid |
| idp_id: "{{ item.name }}" |
| mapping_id: "{{ item.name }}-openid" |
| loop: "{{ keystone_domains }}" |
| loop_control: |
| label: "{{ item.name }}" |