From 9998f503b4211211c46e4fef63d242d1ceb831ec Mon Sep 17 00:00:00 2001 From: Derek Nola Date: Wed, 6 Dec 2023 09:13:05 -0800 Subject: [PATCH] Support user defined kubeconfig, fix merging context (#266) * Support user defined kubeconfig, fix merging context Signed-off-by: Derek Nola --- README.md | 7 +++++-- roles/k3s_server/defaults/main.yml | 1 + roles/k3s_server/tasks/main.yml | 24 ++++++++++++++++++++++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a0a174c..efb075e 100644 --- a/README.md +++ b/README.md @@ -94,13 +94,16 @@ It is assumed that the control node has access to the internet. The playbook wil ## Kubeconfig -After successful bringup, the kubeconfig of the cluster is copied to the control node and set as default (`~/.kube/config`). -Assuming you have [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) installed, you to confirm access to your **Kubernetes** cluster use the following: +After successful bringup, the kubeconfig of the cluster is copied to the control node and merged with `~/.kube/config` under the `k3s-ansible` context. +Assuming you have [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) installed, you can confirm access to your **Kubernetes** cluster with the following: ```bash +kubectl config use-context k3s-ansible kubectl get nodes ``` +If you wish for your kubeconfig to be copied elsewhere and not merged, you can set the `kubeconfig` variable in `inventory.yml` to the desired path. + ## Local Testing A Vagrantfile is provided that provision a 5 nodes cluster using Vagrant (LibVirt or Virtualbox as provider). To use it: diff --git a/roles/k3s_server/defaults/main.yml b/roles/k3s_server/defaults/main.yml index cbcb1e9..00d7ba4 100644 --- a/roles/k3s_server/defaults/main.yml +++ b/roles/k3s_server/defaults/main.yml @@ -2,3 +2,4 @@ k3s_server_location: "/var/lib/rancher/k3s" systemd_dir: "/etc/systemd/system" api_port: 6443 +kubeconfig: ~/.kube/config.new diff --git a/roles/k3s_server/tasks/main.yml b/roles/k3s_server/tasks/main.yml index 8125591..487a3db 100644 --- a/roles/k3s_server/tasks/main.yml +++ b/roles/k3s_server/tasks/main.yml @@ -91,13 +91,33 @@ - name: Copy kubectl config to local machine ansible.builtin.fetch: src: ~{{ ansible_user }}/.kube/config - dest: ~/.kube/config.new + dest: "{{ kubeconfig }}" flat: true + - name: Check whether kubectl is installed on control node + ansible.builtin.command: 'kubectl' + register: kubectl_installed + ignore_errors: yes + delegate_to: 127.0.0.1 + become: false + changed_when: false + + - name: Setup kubeconfig k3s-ansible context + when: kubeconfig == "~/.kube/config.new" && kubectl_installed.rc == 0 + ansible.builtin.replace: + path: "{{ kubeconfig }}" + regexp: 'name: default' + replace: 'name: k3s-ansible' + delegate_to: 127.0.0.1 + become: false + - name: Merge with any existing kube config + when: kubeconfig == "~/.kube/config.new" && kubectl_installed.rc == 0 ansible.builtin.shell: | TFILE=$(mktemp) - KUBECONFIG=~/.kube/config:~/.kube/config.new kubectl config view --flatten > ${TFILE} + KUBECONFIG=~/.kube/config.new kubectl rename-context default k3s-ansible + KUBECONFIG=~/.kube/config.new kubectl config set-context k3s-ansible --user=k3s-ansible --cluster=k3s-ansible + KUBECONFIG=~/.kube/config.new:~/.kube/config kubectl config view --flatten > ${TFILE} mv ${TFILE} ~/.kube/config rm ~/.kube/config.new delegate_to: 127.0.0.1