# 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: Set external_dns_driver
  ansible.builtin.set_fact:
    _neutron_external_dns_driver: "designate"
  when: neutron_designate_integration_enabled | bool

- name: Generate Helm values
  ansible.builtin.set_fact:
    _neutron_helm_values: "{{ __neutron_helm_values }}"

- name: Append Helm values
  when: atmosphere_network_backend == 'ovn'
  ansible.builtin.set_fact:
    _neutron_helm_values: "{{ _neutron_helm_values | combine(__neutron_ovn_helm_values, recursive=True) }}"

- name: Append Helm values (neutron_policy_server)
  when: neutron_policy_server_integration_enabled | bool
  ansible.builtin.set_fact:
    _neutron_helm_values: "{{ _neutron_helm_values | combine(__neutron_policy_server_helm_values, recursive=True) }}"

- name: Deploy Helm chart
  run_once: true
  kubernetes.core.helm:
    name: "{{ neutron_helm_release_name }}"
    chart_ref: "{{ neutron_helm_chart_ref }}"
    release_namespace: "{{ neutron_helm_release_namespace }}"
    create_namespace: true
    kubeconfig: /etc/kubernetes/admin.conf
    values: "{{ _neutron_helm_values | combine(neutron_helm_values, recursive=True) }}"

- name: Create Ingress
  ansible.builtin.include_role:
    name: openstack_helm_ingress
  vars:
    openstack_helm_ingress_endpoint: network
    openstack_helm_ingress_service_name: neutron-server
    openstack_helm_ingress_service_port: 9696
    openstack_helm_ingress_annotations: "{{ neutron_ingress_annotations }}"
    openstack_helm_ingress_class_name: "{{ neutron_ingress_class_name }}"

- name: Create networks
  when: neutron_networks | length > 0
  block:
    - name: Wait until network service ready
      kubernetes.core.k8s_info:
        api_version: apps/v1
        kind: Deployment
        name: neutron-server
        namespace: openstack
        wait_sleep: 10
        wait_timeout: 600
        wait: true
        wait_condition:
          type: Available
          status: true

    - name: Create networks
      openstack.cloud.network:
        cloud: atmosphere
        # Network settings
        name: "{{ item.name }}"
        external: "{{ item.external | default(omit) }}"
        shared: "{{ item.shared | default(omit) }}"
        mtu_size: "{{ item.mtu_size | default(omit) }}"
        port_security_enabled: "{{ item.port_security_enabled | default(omit) }}"
        provider_network_type: "{{ item.provider_network_type | default(omit) }}"
        provider_physical_network: "{{ item.provider_physical_network | default(omit) }}"
        provider_segmentation_id: "{{ item.provider_segmentation_id | default(omit) }}"
      loop: "{{ neutron_networks }}"
      # NOTE(mnaser): This often fails since the SSL certificates are not
      #               ready yet. We need to wait for them to be ready.
      retries: 60
      delay: 5
      register: _result
      until: _result is not failed

    - name: Create subnets
      openstack.cloud.subnet:
        cloud: atmosphere
        # Subnet settings
        network_name: "{{ item.0.name }}"
        name: "{{ item.1.name }}"
        ip_version: "{{ item.1.ip_version | default(omit) }}"
        cidr: "{{ item.1.cidr | default(omit) }}"
        gateway_ip: "{{ item.1.gateway_ip | default(omit) }}"
        no_gateway_ip: "{{ item.1.no_gateway_ip | default(omit) }}"
        allocation_pool_start: "{{ item.1.allocation_pool_start | default(omit) }}"
        allocation_pool_end: "{{ item.1.allocation_pool_end | default(omit) }}"
        dns_nameservers: "{{ item.1.dns_nameservers | default(omit) }}"
        enable_dhcp: "{{ item.1.enable_dhcp | default(omit) }}"
        host_routes: "{{ item.1.host_routes | default(omit) }}"
        ipv6_address_mode: "{{ item.1.ipv6_address_mode | default(omit) }}"
        ipv6_ra_mode: "{{ item.1.ipv6_ra_mode | default(omit) }}"
      with_subelements:
        - "{{ neutron_networks }}"
        - subnets
      # NOTE(mnaser): This often fails since the SSL certificates are not
      #               ready yet. We need to wait for them to be ready.
      retries: 60
      delay: 5
      register: _result
      until: _result is not failed
