From 6380483e8b22abdf52558d7b4b01326886876767 Mon Sep 17 00:00:00 2001
From: Calin Cristian Andrei <cristian.calin@outlook.com>
Date: Sat, 11 Jun 2022 23:19:51 +0300
Subject: [PATCH] [kubeconfig] generate admin kube config from
 /etc/kubernetes/admin.conf instead of the workaround of using kubeadm init
 phase kubeadm admin which fails with cri-dockerd

---
 roles/kubernetes/client/tasks/main.yml | 27 +++++---------------------
 1 file changed, 5 insertions(+), 22 deletions(-)

diff --git a/roles/kubernetes/client/tasks/main.yml b/roles/kubernetes/client/tasks/main.yml
index 9621e2f54..cb9e81e79 100644
--- a/roles/kubernetes/client/tasks/main.yml
+++ b/roles/kubernetes/client/tasks/main.yml
@@ -49,33 +49,16 @@
     port: "{{ kube_apiserver_port }}"
     timeout: 180
 
-- name: Create external_kubeconfig dir
-  file:
-    path: "{{ kube_config_dir }}/external_kubeconfig"
-    mode: "0750"
-    state: directory
-  when: kubeconfig_localhost
-
-# NOTE(mattymo): Please forgive this workaround
-- name: Generate admin kubeconfig with external api endpoint  # noqa 302
-  shell: >-
-    {{ bin_dir }}/kubeadm
-    init phase
-    kubeconfig admin
-    --kubeconfig-dir {{ kube_config_dir }}/external_kubeconfig
-    --cert-dir {{ kube_cert_dir }}
-    --apiserver-advertise-address {{ external_apiserver_address }}
-    --apiserver-bind-port {{ external_apiserver_port }}
-    >/dev/null && cat {{ kube_config_dir }}/external_kubeconfig/admin.conf &&
-    rm -rf {{ kube_config_dir }}/external_kubeconfig
-  environment: "{{ proxy_env }}"
+- name: Get admin kubeconfig from remote host
+  slurp:
+    src: "{{ kube_config_dir }}/admin.conf"
   run_once: yes
   register: raw_admin_kubeconfig
   when: kubeconfig_localhost
 
 - name: Convert kubeconfig to YAML
   set_fact:
-    admin_kubeconfig: "{{ raw_admin_kubeconfig.stdout | from_yaml }}"
+    admin_kubeconfig: "{{ raw_admin_kubeconfig.content | b64decode | from_yaml }}"
   when: kubeconfig_localhost
 
 - name: Override username in kubeconfig
@@ -86,7 +69,7 @@
     user_certs: "{{ admin_kubeconfig['users'][0]['user'] }}"
     username: "kubernetes-admin-{{ cluster_name }}"
     context: "kubernetes-admin-{{ cluster_name }}@{{ cluster_name }}"
-    override_cluster_name: "{{ { 'clusters': [ { 'cluster': cluster_infos, 'name': cluster_name } ] } }}"
+    override_cluster_name: "{{ { 'clusters': [ { 'cluster': (cluster_infos|combine({'server': 'https://'+external_apiserver_address+':'+(external_apiserver_port|string)})), 'name': cluster_name } ] } }}"
     override_context: "{{ { 'contexts': [ { 'context': { 'user': username, 'cluster': cluster_name }, 'name': context } ], 'current-context': context } }}"
     override_user: "{{ { 'users': [ { 'name': username, 'user': user_certs  } ] } }}"
   when: kubeconfig_localhost
-- 
GitLab