# 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.

# NOTE(mnaser): Open vSwitch will refuse to start if `LimitMEMLOCK` is
#               not set to `infinity` in `/etc/systemd/system.conf`, so we run
#               this task to ensure that it is set.
- name: Verify that LimitMEMLOCK is configured for containerd
  block:
    - name: Get the current status of all systemd values for containerd
      changed_when: false
      ansible.builtin.command: systemctl show containerd --property LimitMEMLOCK # noqa: command-instead-of-module
      register: _openvswitch_memlock_value

    - name: Assert that LimitMEMLOCK is set to infinity
      ansible.builtin.assert:
        that:
          - "'LimitMEMLOCK=infinity' in _openvswitch_memlock_value.stdout"

- name: Cache openvswitch image before install or upgrade
  block:
    - name: Pull openvswitch image
      ansible.builtin.command: crictl pull {{ atmosphere_images['openvswitch_vswitchd'] }}
      register: pull_result
      changed_when: false

    - name: Verify openvswitch image pull
      ansible.builtin.assert:
        that:
          - pull_result.rc == 0
          - "'Image is up to date' in pull_result.stdout or 'Image pulled' in pull_result.stdout"
        fail_msg: "Failed to pull openvswitch image"
        success_msg: "Successfully pulled openvswitch image"

- name: Deploy Helm chart
  run_once: true
  delegate_to: "{{ groups['controllers'][0] }}"
  kubernetes.core.helm:
    name: "{{ openvswitch_helm_release_name }}"
    chart_ref: "{{ openvswitch_helm_chart_ref }}"
    release_namespace: "{{ openvswitch_helm_release_namespace }}"
    create_namespace: true
    kubeconfig: "{{ openvswitch_helm_kubeconfig }}"
    values: "{{ _openvswitch_helm_values | combine(openvswitch_helm_values, recursive=True) }}"
