| # 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: Generate resources |
| ansible.builtin.import_tasks: |
| file: generate_resources.yml |
| |
| - name: Create CAs & Issuers |
| kubernetes.core.k8s: |
| state: present |
| definition: |
| - apiVersion: cert-manager.io/v1 |
| kind: Certificate |
| metadata: |
| name: "{{ item }}-ca" |
| namespace: openstack |
| spec: |
| isCA: true |
| commonName: "{{ octavia_tls_server_common_name if item == 'octavia-server' else octavia_tls_client_common_name }}" |
| secretName: "{{ item }}-ca" |
| duration: 87600h0m0s |
| renewBefore: 720h0m0s |
| privateKey: "{{ private_key | from_yaml }}" |
| issuerRef: |
| name: self-signed |
| kind: ClusterIssuer |
| group: cert-manager.io |
| |
| - apiVersion: cert-manager.io/v1 |
| kind: Issuer |
| metadata: |
| name: "{{ item }}" |
| namespace: openstack |
| spec: |
| ca: |
| secretName: "{{ item }}-ca" |
| vars: |
| # NOTE(mnaser): Unfortuantely, Ansible renders all variables as strings so |
| # we do this workaround to make sure the size is an integer. |
| private_key: | |
| algorithm: "{{ octavia_tls_server_private_key_algorithm if item == 'octavia-server' else octavia_tls_client_private_key_algorithm }}" |
| size: {{ octavia_tls_server_private_key_size if item == 'octavia-server' else octavia_tls_client_private_key_size }} |
| loop: |
| - octavia-client |
| - octavia-server |
| |
| - name: Create certificate for Octavia clients |
| kubernetes.core.k8s: |
| state: present |
| definition: |
| apiVersion: cert-manager.io/v1 |
| kind: Certificate |
| metadata: |
| name: octavia-client-certs |
| namespace: openstack |
| spec: |
| commonName: "{{ octavia_tls_client_common_name }}" |
| secretName: octavia-client-certs |
| additionalOutputFormats: |
| - type: CombinedPEM |
| duration: 87600h0m0s |
| renewBefore: 720h0m0s |
| privateKey: "{{ private_key | from_yaml }}" |
| issuerRef: |
| name: octavia-client |
| kind: Issuer |
| group: cert-manager.io |
| vars: |
| # NOTE(mnaser): Unfortuantely, Ansible renders all variables as strings so |
| # we do this workaround to make sure the size is an integer. |
| private_key: | |
| algorithm: "{{ octavia_tls_client_private_key_algorithm }}" |
| size: {{ octavia_tls_client_private_key_size }} |
| |
| - name: Create admin compute quotaset |
| openstack.cloud.quota: |
| cloud: atmosphere |
| # NOTE(okozachenko): It uses project name instead of id. |
| name: admin |
| instances: -1 |
| cores: -1 |
| ram: -1 |
| volumes: -1 |
| gigabytes: -1 |
| security_group: -1 |
| security_group_rule: -1 |
| |
| - name: Deploy Helm chart |
| run_once: true |
| kubernetes.core.helm: |
| name: "{{ octavia_helm_release_name }}" |
| chart_ref: "{{ octavia_helm_chart_ref }}" |
| release_namespace: "{{ octavia_helm_release_namespace }}" |
| create_namespace: true |
| kubeconfig: "{{ octavia_helm_kubeconfig }}" |
| values: "{{ _octavia_helm_values | combine(octavia_helm_values, recursive=True) }}" |
| |
| - name: Add implied roles |
| run_once: true |
| ansible.builtin.shell: | |
| set -o posix |
| source /etc/profile.d/atmosphere.sh |
| openstack implied role create \ |
| --implied-role {{ item.implies }} \ |
| {{ item.role }} |
| args: |
| executable: /bin/bash |
| loop: |
| - role: member |
| implies: load-balancer_member |
| - role: reader |
| implies: load-balancer_observer |
| environment: |
| OS_CLOUD: atmosphere |
| register: _octavia_implied_role_create |
| changed_when: _octavia_implied_role_create.rc == 0 |
| failed_when: _octavia_implied_role_create.rc != 0 and 'Duplicate entry.' not in _octavia_implied_role_create.stderr |
| retries: 10 |
| delay: 1 |
| until: _octavia_implied_role_create.rc == 0 or 'Duplicate entry.' in _octavia_implied_role_create.stderr |
| |
| - name: Create Ingress |
| ansible.builtin.include_role: |
| name: openstack_helm_ingress |
| vars: |
| openstack_helm_ingress_endpoint: load_balancer |
| openstack_helm_ingress_service_name: octavia-api |
| openstack_helm_ingress_service_port: 9876 |
| openstack_helm_ingress_annotations: "{{ octavia_ingress_annotations }}" |
| openstack_helm_ingress_class_name: "{{ octavia_ingress_class_name }}" |