--- - 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