---
tasks:
  - name: Initialize the Kubernetes cluster
    ansible.builtin.shell: kubeadm init --pod-network-cidr=10.244.0.0/16
    when: is_control_plane | bool
    register: init_output
    ignore_errors: yes

  - name: Capture the kubeadm join command
    set_fact:
      join_command: "{{ init_output.stdout_lines | select('search','kubeadm join') | list | first }}"
    when: is_control_plane | bool
    ignore_errors: yes

  - name: Debug print the kubeadm join command
    ansible.builtin.debug:
      msg: 'The captured kubeadm join command is: {{ join_command }}'
    when:
      - is_control_plane | bool
      - join_command is defined

  - name: Join the node to the Kubernetes cluster
    when:
      - "'worker_nodes' in group_names"
      - join_command is defined
    ansible.builtin.shell: '{{ join_command }} --discovery-token-unsafe-skip-ca-verification'
    ignore_errors: yes

  - name: Ensure Kubernetes directory exists
    ansible.builtin.file:
      path: '/etc/kubernetes/'
      state: directory
    when: is_control_plane | bool

  - name: Ensure .kube directory exists in user's home
    ansible.builtin.file:
      path: '{{ ansible_env.HOME }}/.kube'
      state: directory
      mode: '0755'

  - name: Copy admin.conf to user's .kube directory
    ansible.builtin.copy:
      src: /etc/kubernetes/admin.conf
      dest: '{{ ansible_env.HOME }}/.kube/config'
      remote_src: yes
      owner: '{{ ansible_env.USER }}'
      group: '{{ ansible_env.USER }}'
      mode: '0644'
    when: is_control_plane | bool
