forked from tim/k3s-ansible
* fix(k3s_server): skip k3s-init log collection when the destination is unset
The guard on the k3s-init diagnostics include used a boolean default for
the ANSIBLE_K3S_LOG_DIR lookup so that the when conditional would be a real
boolean. That is unnecessary: `log_destination | default('') != ''` is a
comparison and always evaluates to a bool, so ansible-core 2.19 never sees
a non-boolean conditional here.
The boolean default also defeats the guard. With ANSIBLE_K3S_LOG_DIR unset,
log_destination is the bool False, and `False != ''` is True in Python
because False == 0. The include therefore runs on every provisioning run,
executing the journalctl, systemctl, ip, ss, iptables, service_facts, ping
and wait_for diagnostics in fetch_k3s_init_logs.yml, then creating a
directory literally named "False" in the operator's working directory.
Use an empty-string default so the unset case renders "" and the guard
skips. CI did not catch this because .github/workflows/test.yml always
exports ANSIBLE_K3S_LOG_DIR.
Add a regression test that parses the role, renders the real log_destination
expression for both the unset and set cases, and asserts that no boolean
default has been reintroduced.
* chore(site): wrap the over-long kubeconfig fetch conditional
90 lines
2.6 KiB
YAML
90 lines
2.6 KiB
YAML
---
|
|
- name: Pre tasks
|
|
hosts: all
|
|
pre_tasks:
|
|
- name: Verify Ansible is version 2.11 or above. (If this fails you may need to update Ansible)
|
|
ansible.builtin.assert:
|
|
that: ansible_version.full is version_compare('2.11', '>=')
|
|
msg: >
|
|
"Ansible is out of date. See here for more info: https://docs.technotim.com/posts/ansible-automation/"
|
|
|
|
- name: Verify all cluster nodes have unique hostnames
|
|
ansible.builtin.assert:
|
|
that: (cluster_hostnames | unique | length) == (cluster_hostnames | length)
|
|
msg: >-
|
|
k3s nodes must have unique hostnames. Found a duplicate in:
|
|
{{ cluster_hostnames | unique }}. Each node registers in the cluster
|
|
keyed by its hostname, so matching hostnames prevent nodes from joining.
|
|
vars:
|
|
cluster_hostnames: >-
|
|
{{
|
|
groups['k3s_cluster']
|
|
| map('extract', hostvars, ['ansible_facts', 'hostname'])
|
|
| list
|
|
}}
|
|
run_once: true
|
|
when: "'k3s_cluster' in groups"
|
|
|
|
- name: Prepare Proxmox cluster
|
|
hosts: proxmox
|
|
gather_facts: true
|
|
become: true
|
|
environment: "{{ proxy_env | default({}) }}"
|
|
roles:
|
|
- role: proxmox_lxc
|
|
when: proxmox_lxc_configure
|
|
|
|
- name: Prepare k3s nodes
|
|
hosts: k3s_cluster
|
|
gather_facts: true
|
|
environment: "{{ proxy_env | default({}) }}"
|
|
roles:
|
|
- role: lxc
|
|
become: true
|
|
when: proxmox_lxc_configure
|
|
- role: prereq
|
|
become: true
|
|
- role: download
|
|
become: true
|
|
- role: raspberrypi
|
|
become: true
|
|
- role: k3s_custom_registries
|
|
become: true
|
|
when: custom_registries
|
|
|
|
- name: Setup k3s servers
|
|
hosts: master
|
|
environment: "{{ proxy_env | default({}) }}"
|
|
roles:
|
|
- role: k3s_server
|
|
become: true
|
|
|
|
- name: Setup k3s agents
|
|
hosts: node
|
|
environment: "{{ proxy_env | default({}) }}"
|
|
roles:
|
|
- role: k3s_agent
|
|
become: true
|
|
|
|
- name: Configure k3s cluster
|
|
hosts: master
|
|
environment: "{{ proxy_env | default({}) }}"
|
|
roles:
|
|
- role: k3s_server_post
|
|
become: true
|
|
|
|
- name: Storing kubeconfig in the playbook directory
|
|
hosts: master
|
|
environment: "{{ proxy_env | default({}) }}"
|
|
tasks:
|
|
- name: >-
|
|
Copying kubeconfig from
|
|
{{ hostvars[groups[group_name_master | default('master')][0]]['ansible_facts']['hostname'] }}
|
|
ansible.builtin.fetch:
|
|
src: "{{ ansible_facts['user_dir'] }}/.kube/config"
|
|
dest: ./kubeconfig
|
|
flat: true
|
|
when: >-
|
|
ansible_facts.hostname ==
|
|
hostvars[groups[group_name_master | default('master')][0]]['ansible_facts']['hostname']
|