- 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

# Ensure join_command is defined even if the previous task didn't execute or failed to capture the desired output
- name: Check if kubeadm join command was captured
  set_fact:
    join_command: "{{ init_output.stdout_lines | select('search','kubeadm join') | list | first }}"
  when:
    - is_control_plane | bool
    - init_output.stdout_lines is defined
  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: Set KUBECONFIG environment variable for the root user
  ansible.builtin.lineinfile:
    path: /root/.bashrc
    line: 'export KUBECONFIG=/etc/kubernetes/admin.conf'
    create: yes
  when: is_control_plane | bool

- name: 'Join the node to the Kubernetes cluster with enhanced checks'
  vars:
    join_command_modified: "{{ hostvars[groups['control_plane'][0]].join_command[:-2] }}"
  ansible.builtin.shell: '{{ join_command_modified }} --discovery-token-unsafe-skip-ca-verification'
  when:
    - "'worker_nodes' in group_names"
  ignore_errors: true
  register: join_result

- name: 'Debug - Check join result'
  ansible.builtin.debug:
    var: join_result
  when: "'worker_nodes' in group_names"
