# 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: Add repository keys
  ansible.builtin.copy:
    src: apt-key.gpg
    dest: /usr/share/keyrings/kubernetes-archive-keyring.gpg
    owner: root
    group: root
    mode: 0644
  when:
    - kubernetes_repo_url == _kubernetes_upstream_apt_repository

- name: Add repository
  ansible.builtin.apt_repository:
    repo:
      deb
      {% if kubernetes_repo_url == _kubernetes_upstream_apt_repository %}[signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg]{% endif %}
      {{ kubernetes_repo_url }}
      kubernetes-xenial
      main
    state: present

- name: Setup version pins
  ansible.builtin.template:
    src: apt-preferences.j2
    dest: /etc/apt/preferences.d/kubernetes
    mode: 0644

- name: Install packages
  ansible.builtin.apt:
    name:
      - "containerd"
      - "kubeadm={{ kubernetes_version }}-00"
      - "kubectl={{ kubernetes_version }}-00"
      - "kubelet={{ kubernetes_version }}-00"
    state: present

- name: Enable kernel modules on-boot
  ansible.builtin.template:
    src: modules-load.conf.j2
    dest: /etc/modules-load.d/k8s.conf
    owner: root
    group: root
    mode: 0644

- name: Enable kernel modules in runtime
  community.general.modprobe:
    name: "{{ item }}"
    state: present
  loop: "{{ kubernetes_kernel_modules }}"

- name: Configure sysctl values
  ansible.posix.sysctl:
    name: "{{ item.name }}"
    value: "{{ item.value }}"
    state: present
  loop: "{{ kubernetes_sysctls }}"

- name: Check swap status
  ansible.builtin.command: /sbin/swapon -s
  changed_when: false
  register: _swapon

- name: Disable swap
  ansible.builtin.command: /sbin/swapoff -a
  ignore_errors: "{{ ansible_check_mode }}"
  when:
    - _swapon.stdout

- name: Remove swapfile from /etc/fstab
  ansible.posix.mount:
    name: "{{ item }}"
    fstype: swap
    state: absent
  with_items:
    - swap
    - none

- name: Configure short hostname
  ansible.builtin.hostname:
    name: "{{ inventory_hostname_short }}"

- name: Ensure hostname inside hosts file
  ansible.builtin.lineinfile:
    path: /etc/hosts
    regexp: '^127\.0\.1\.1'
    line: 127.0.1.1 {{ inventory_hostname }} {{ inventory_hostname_short }}

- name: Setup control plane
  when: inventory_hostname in groups[kubernetes_control_plane_group]
  ansible.builtin.include_tasks: control-plane.yml

- name: Setup nodes
  when: inventory_hostname not in groups[kubernetes_control_plane_group]
  ansible.builtin.include_tasks: nodes.yml

- name: Add labels to control plane nodes
  delegate_to: "{{ groups[kubernetes_control_plane_group][0] }}"
  kubernetes.core.k8s:
    state: patched
    kind: Node
    name: "{{ inventory_hostname_short }}"
    definition:
      metadata:
        labels:
          openstack-control-plane: enabled
          openvswitch: enabled
  when:
    - inventory_hostname in groups['controllers']

- name: Add labels to compute nodes
  delegate_to: "{{ groups[kubernetes_control_plane_group][0] }}"
  kubernetes.core.k8s:
    state: patched
    kind: Node
    name: "{{ inventory_hostname_short }}"
    definition:
      metadata:
        labels:
          openstack-compute-node: enabled
          openvswitch: enabled
  when:
    - inventory_hostname in groups['computes']
