---
- name: Test if correct apiserver is set in all kubeconfigs
  shell: >-
    grep -Fq "{{ kube_apiserver_endpoint }}" {{ kube_config_dir }}/admin.conf &&
    grep -Fq "{{ kube_apiserver_endpoint }}" {{ kube_config_dir }}/controller-manager.conf &&
    grep -Fq "{{ kube_apiserver_endpoint }}" {{ kube_config_dir }}/kubelet.conf &&
    grep -Fq "{{ kube_apiserver_endpoint }}" {{ kube_config_dir }}/scheduler.conf
  register: kubeconfig_correct_apiserver
  changed_when: False
  failed_when: False

- name: Create temporary directory
  tempfile:
    state: directory
  register: kubeconfig_temp_dir
  when: kubeconfig_correct_apiserver.rc != 0

- name: Generate new kubeconfigs with correct apiserver
  command: >-
    {{ bin_dir }}/kubeadm init phase kubeconfig all
    --config {{ kube_config_dir }}/kubeadm-config.yaml
    --kubeconfig-dir {{ kubeconfig_temp_dir.path }}
  when: kubeconfig_correct_apiserver.rc != 0

- name: Copy new kubeconfigs to kube config dir
  copy:
    src: "{{ kubeconfig_temp_dir.path }}/{{ item }}"
    dest: "{{ kube_config_dir }}/{{ item }}"
    mode: 0640
    remote_src: yes
  when: kubeconfig_correct_apiserver.rc != 0
  with_items:
    - admin.conf
    - controller-manager.conf
    - kubelet.conf
    - scheduler.conf
  notify:
    - "Master | Restart kube-controller-manager"
    - "Master | Restart kube-scheduler"
    - "Master | reload kubelet"

- name: Cleanup temporary directory
  file:
    path: "{{ kubeconfig_temp_dir.path }}"
    state: absent
  when: kubeconfig_correct_apiserver.rc != 0