<mohammadrony>
---
- name: Install kubectl
  dnf:
    name: kubectl
    disable_excludes: kubernetes
    state: present

- name: Pull kubernetes container images
  command: kubeadm config images pull

- name: Initialize kubernetes cluster
  shell: kubeadm init --apiserver-advertise-address={{ kubernetes.control_ip }} --pod-network-cidr={{ calico.cidr }} --cri-socket=unix:///run/containerd/containerd.sock
  # kubeadm init --pod-network-cidr=192.168.128.0/17
  register: output

- name: Save output file from master
  copy:
    content: "{{ output.stdout }}"
    dest: /tmp/kube-output.txt

- name: Copy join command to local file
  fetch:
    src: /tmp/kube-output.txt
    dest: /home/{{ user }}/kube-output.txt
    flat: yes

- name: Creates kubeconfig directory
  file:
    path: /home/{{ user }}/.kube
    state: directory

- name: Copy kubeconfig file
  copy:
    src: /etc/kubernetes/admin.conf
    dest: /home/{{ user }}/.kube/config
    owner: "{{ user }}"
    group: "{{ user }}"
    mode: "0644"
    remote_src: yes

- name: Add kubectl alias
  lineinfile:
    path: /home/{{ user }}/.bashrc
    line: "alias k='kubectl'"
    state: present

- name: Fetch file and set permissions
  fetch:
    src: /home/{{ user }}/.kube/config
    dest: /home/{{ user }}/kubeconfig
    flat: yes
    validate_checksum: yes

- name: Download Calico YAML
  get_url:
    url: https://raw.githubusercontent.com/projectcalico/calico/{{ calico.version }}/manifests/calico.yaml
    # https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
    dest: /tmp/calico.yaml

- name: Apply Calico YAML
  become_user: "{{ user }}"
  shell: kubectl apply -f calico.yaml
  args:
    chdir: /tmp/

- name: Pause for Calico pods to ready
  become_user: "{{ user }}"
  shell: kubectl wait pod --all --for=condition=Ready --namespace=kube-system --timeout=300s