prole/infrastructure/playbooks/test_k3s_kubeconfig_rewrite.yml

78 lines
2.6 KiB
YAML

---
- name: Test - k3s kubeconfig server rewrite (local)
hosts: localhost
connection: local
gather_facts: false
vars:
_sample_kubeconfig: |
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: ZmFrZQ==
server: https://127.0.0.1:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
users:
- name: default
user:
client-certificate-data: ZmFrZQ==
client-key-data: ZmFrZQ==
_desired_server: https://myrddin.prole.org:6443
tasks:
- name: Old kubeconfig rewrite regex should break YAML (expected)
block:
- name: Apply old buggy regex
ansible.builtin.set_fact:
_kubeconfig_bad: >-
{{ _sample_kubeconfig
| regex_replace('server: https://[^\\s]+', 'server: ' ~ _desired_server) }}
- name: Attempt YAML parse (expected to fail)
ansible.builtin.set_fact:
_kubeconfig_bad_parsed: "{{ _kubeconfig_bad | from_yaml }}"
- name: Fail if YAML parse unexpectedly succeeded
ansible.builtin.fail:
msg: "Old regex unexpectedly produced valid YAML; test sample may need adjustment."
rescue:
- name: Mark expected failure as observed
ansible.builtin.set_fact:
_old_regex_failed_as_expected: true
always:
- name: Assert old regex failure was observed
ansible.builtin.assert:
that:
- _old_regex_failed_as_expected | default(false) | bool
- name: New kubeconfig rewrite regex should preserve YAML structure
ansible.builtin.set_fact:
_kubeconfig_good: >-
{{ _sample_kubeconfig
| regex_replace('server:\s*https?://\S+', 'server: ' ~ _desired_server) }}
- name: Parse rewritten kubeconfig
ansible.builtin.set_fact:
_kubeconfig_good_parsed: "{{ _kubeconfig_good | from_yaml }}"
changed_when: false
- name: Assert kubeconfig keys and server were rewritten
ansible.builtin.assert:
that:
- _kubeconfig_good_parsed is mapping
- (_kubeconfig_good_parsed.contexts | default([])) | length == 1
- (_kubeconfig_good_parsed.clusters | default([])) | length == 1
- (_kubeconfig_good_parsed.users | default([])) | length == 1
- _kubeconfig_good_parsed['current-context'] == 'default'
- _kubeconfig_good_parsed.clusters[0].cluster.server == _desired_server