103 lines
3.4 KiB
YAML
103 lines
3.4 KiB
YAML
---
|
|
# Kubeconfig merging tasks
|
|
|
|
- name: Check if main kubeconfig exists
|
|
delegate_to: localhost
|
|
ansible.builtin.stat:
|
|
path: "{{ local_home }}/.kube/config"
|
|
register: main_kubeconfig
|
|
|
|
- name: Create backup of existing kubeconfig
|
|
delegate_to: localhost
|
|
ansible.builtin.copy:
|
|
src: "{{ local_home }}/.kube/config"
|
|
dest: "{{ local_home }}/.kube/config.backup.{{ ansible_date_time.epoch }}"
|
|
mode: "0644"
|
|
when: main_kubeconfig.stat.exists
|
|
|
|
- name: Read new cluster kubeconfig
|
|
delegate_to: localhost
|
|
ansible.builtin.slurp:
|
|
src: "{{ local_home }}/.kube/config-{{ cluster_name }}"
|
|
register: new_kubeconfig_content
|
|
|
|
- name: Parse new kubeconfig
|
|
delegate_to: localhost
|
|
ansible.builtin.set_fact:
|
|
new_kubeconfig: "{{ new_kubeconfig_content.content | b64decode | from_yaml }}"
|
|
|
|
- name: Update cluster name in kubeconfig
|
|
delegate_to: localhost
|
|
ansible.builtin.set_fact:
|
|
updated_kubeconfig:
|
|
apiVersion: "{{ new_kubeconfig.apiVersion }}"
|
|
kind: "{{ new_kubeconfig.kind }}"
|
|
clusters:
|
|
- name: "{{ cluster_name }}"
|
|
cluster: "{{ new_kubeconfig.clusters[0].cluster }}"
|
|
contexts:
|
|
- name: "{{ cluster_name }}-admin"
|
|
context:
|
|
cluster: "{{ cluster_name }}"
|
|
user: "{{ cluster_name }}-admin"
|
|
users:
|
|
- name: "{{ cluster_name }}-admin"
|
|
user: "{{ new_kubeconfig.users[0].user }}"
|
|
current-context: "{{ cluster_name }}-admin"
|
|
|
|
- name: Merge with existing kubeconfig or create new one
|
|
delegate_to: localhost
|
|
block:
|
|
- name: Read existing kubeconfig
|
|
ansible.builtin.slurp:
|
|
src: "{{ local_home }}/.kube/config"
|
|
register: existing_kubeconfig_content
|
|
when: main_kubeconfig.stat.exists
|
|
|
|
- name: Parse existing kubeconfig
|
|
ansible.builtin.set_fact:
|
|
existing_kubeconfig: "{{ existing_kubeconfig_content.content | b64decode | from_yaml }}"
|
|
when: main_kubeconfig.stat.exists
|
|
|
|
- name: Merge kubeconfigs
|
|
ansible.builtin.set_fact:
|
|
merged_kubeconfig:
|
|
apiVersion: "{{ existing_kubeconfig.apiVersion | default('v1') }}"
|
|
kind: "{{ existing_kubeconfig.kind | default('Config') }}"
|
|
clusters: "{{ (existing_kubeconfig.clusters | default([])) + updated_kubeconfig.clusters }}"
|
|
contexts: "{{ (existing_kubeconfig.contexts | default([])) + updated_kubeconfig.contexts }}"
|
|
users: "{{ (existing_kubeconfig.users | default([])) + updated_kubeconfig.users }}"
|
|
current-context: "{{ updated_kubeconfig['current-context'] }}"
|
|
when: main_kubeconfig.stat.exists
|
|
|
|
- name: Use new kubeconfig as merged config
|
|
ansible.builtin.set_fact:
|
|
merged_kubeconfig: "{{ updated_kubeconfig }}"
|
|
when: not main_kubeconfig.stat.exists
|
|
|
|
- name: Write merged kubeconfig
|
|
delegate_to: localhost
|
|
ansible.builtin.copy:
|
|
content: "{{ merged_kubeconfig | to_nice_yaml }}"
|
|
dest: "{{ local_home }}/.kube/config"
|
|
mode: "0644"
|
|
owner: "{{ local_user }}"
|
|
|
|
- name: Display available contexts
|
|
delegate_to: localhost
|
|
ansible.builtin.debug:
|
|
msg: |
|
|
Kubeconfig updated successfully!
|
|
|
|
Available contexts:
|
|
{% for context in merged_kubeconfig.contexts %}
|
|
- {{ context.name }}
|
|
{% endfor %}
|
|
|
|
Current context: {{ merged_kubeconfig['current-context'] }}
|
|
|
|
To switch contexts, use:
|
|
kubectl config use-context <context-name>
|
|
|
|
To list all contexts:
|
|
kubectl config get-contexts |