# 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
      kubernetes.core.k8s:
        state: patched
        api_version: helm.toolkit.fluxcd.io/v2beta1
        kind: HelmRelease
        name: "{{ octavia_helm_release_name }}"
        namespace: "{{ octavia_helm_release_namespace }}"
        definition:
          spec:
            suspend: true

    - name: Remove the existing HelmRelease
      kubernetes.core.k8s:
        state: absent
        api_version: helm.toolkit.fluxcd.io/v2beta1
        kind: HelmRelease
        name: "{{ octavia_helm_release_name }}"
        namespace: "{{ octavia_helm_release_namespace }}"

- name: Create management network
  openstack.cloud.network:
    cloud: atmosphere
    # Network settings
    name: lb-mgmt-net
  register: _octavia_management_network

- name: Create management subnet
  openstack.cloud.subnet:
    cloud: atmosphere
    # Subnet settings
    network_name: lb-mgmt-net
    name: lb-mgmt-subnet
    cidr: "{{ octavia_management_subnet_cidr }}"

- name: Create health manager security group
  openstack.cloud.security_group:
    cloud: atmosphere
    name: lb-health-mgr-sec-grp
  register: _octavia_health_manager_sg

- name: Create health manager security group rules
  openstack.cloud.security_group_rule:
    cloud: atmosphere
    security_group: "{{ _octavia_health_manager_sg.id }}"
    direction: ingress
    ethertype: IPv4
    protocol: tcp
    port_range_min: "{{ item }}"
    port_range_max: "{{ item }}"
  loop:
    - 5555
    - 10514
    - 20514

- name: Create health manager networking ports
  openstack.cloud.port:
    cloud: atmosphere
    name: "octavia-health-manager-port-{{ hostvars[item]['inventory_hostname_short'] }}"
    device_owner: octavia:health-mgr
    network: "{{ _octavia_management_network.id }}"
    security_groups:
      - "{{ _octavia_health_manager_sg.id }}"
  loop: "{{ groups['controllers'] }}"

- name: Set binding for ports
  changed_when: false
  ansible.builtin.shell: |
    openstack port set \
      --host {{ hostvars[item]['ansible_fqdn'] }} \
      octavia-health-manager-port-{{ hostvars[item]['inventory_hostname_short'] }}
  environment:
    OS_CLOUD: atmosphere
  loop: "{{ groups['controllers'] }}"

- name: Get health manager networking ports
  openstack.cloud.port_info:
    cloud: atmosphere
    port: "octavia-health-manager-port-{{ hostvars[item]['ansible_fqdn'] | split('.') | first }}"
  loop: "{{ groups['controllers'] }}"
  register: _octavia_health_manager_ports

- name: Set controller_ip_port_list
  ansible.builtin.set_fact:
    _octavia_controller_ip_port_list: "{{ (_octavia_controller_ip_port_list | d([]) + [item.openstack_ports[0].fixed_ips[0].ip_address + ':5555']) | unique }}"
  loop: "{{ _octavia_health_manager_ports.results }}"
  loop_control:
    label: "{{ item.openstack_ports[0].name }}"

- name: Create amphora security group
  openstack.cloud.security_group:
    cloud: atmosphere
    name: lb-mgmt-sec-grp
  register: _octavia_amphora_sg

- name: Create amphora security group rules
  openstack.cloud.security_group_rule:
    cloud: atmosphere
    security_group: "{{ _octavia_amphora_sg.id }}"
    direction: ingress
    ethertype: IPv4
    protocol: tcp
    port_range_min: "{{ item.0 }}"
    port_range_max: "{{ item.0 }}"
    remote_ip_prefix: "{{ item.1.openstack_ports[0].fixed_ips[0].ip_address }}/32"
  with_nested:
    - [22, 9443]
    - "{{ _octavia_health_manager_ports.results }}"

- name: Create amphora flavor
  openstack.cloud.compute_flavor:
    cloud: atmosphere
    name: "{{ octavia_amphora_flavor_name }}"
    vcpus: "{{ octavia_amphora_flavor_vcpus }}"
    ram: "{{ octavia_amphora_flavor_ram }}"
    disk: "{{ octavia_amphora_flavor_disk }}"
    is_public: false
  register: _octavia_amphora_flavor

- name: Upload Amphora image
  ansible.builtin.include_role:
    name: glance_image
  vars:
    glance_image_name: "{{ octavia_amphora_image_name }}"
    glance_image_url: "{{ octavia_amphora_image_url }}"
    glance_image_container_format: "{{ octavia_amphora_image_container_format }}"
    glance_image_disk_format: "{{ octavia_amphora_image_disk_format }}"
    glance_image_tags: "{{ octavia_amphora_image_tags }}"

- name: Get Amphora image information
  openstack.cloud.image_info:
    cloud: atmosphere
    image: "{{ octavia_amphora_image_name }}"
  register: _octavia_amphora_image

- 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: "{{ item }}"
          secretName: "{{ item }}-ca"
          duration: 87600h
          renewBefore: 720h
          privateKey:
            algorithm: ECDSA
            size: 256
          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"
  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-client
        secretName: octavia-client-certs
        additionalOutputFormats:
          - type: CombinedPEM
        duration: 87600h
        renewBefore: 720h
        issuerRef:
          name: octavia-client
          kind: Issuer
          group: cert-manager.io

- 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

- 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: /etc/kubernetes/admin.conf
    values: "{{ _octavia_helm_values | combine(octavia_helm_values, recursive=True) }}"

- name: Add implied roles
  run_once: true
  ansible.builtin.shell: |
    openstack implied role create \
      --implied-role {{ item.implies }} \
      {{ item.role }}
  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

- 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 }}"
