diff --git a/roles/kubernetes/master/tasks/kubeadm-fix-apiserver.yml b/roles/kubernetes/master/tasks/kubeadm-fix-apiserver.yml index 32a4e0ffbe6..4200e6d7147 100644 --- a/roles/kubernetes/master/tasks/kubeadm-fix-apiserver.yml +++ b/roles/kubernetes/master/tasks/kubeadm-fix-apiserver.yml @@ -1,13 +1,45 @@ --- -- name: Update server field in component kubeconfigs - lineinfile: - dest: "{{ kube_config_dir }}/{{ item }}.conf" - regexp: 'server:' - line: ' server: {{ kube_apiserver_endpoint }}' - backup: yes +- 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 }}" + remote_src: yes + when: kubeconfig_correct_apiserver.rc != 0 with_items: - - controller-manager - - scheduler - when: - - not loadbalancer_apiserver is defined - notify: "Master | Restart kube-{{ item }}" + - 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