mirror of
https://github.com/techno-tim/k3s-ansible.git
synced 2026-08-09 07:23:19 +02:00
cf76292169
Add a preflight assertion to site.yml that confirms every host in the k3s_cluster group reports a unique hostname. k3s registers each node keyed by its hostname, so duplicate hostnames prevent nodes from joining the cluster and are hard to troubleshoot. The check fails fast in the Pre tasks instead of surfacing as a cryptic registration failure later. - site.yml: assert (cluster_hostnames | unique | length) == length for the k3s_cluster group, skipping hosts outside that group - README.md: document the unique-hostname requirement - .github/scripts/test-unique-hostname-precheck.sh: regression test - .pre-commit-config.yaml: wire the test into pre-commit Closes #636
86 lines
2.5 KiB
YAML
86 lines
2.5 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_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_hostname'] }}
|
|
ansible.builtin.fetch:
|
|
src: "{{ ansible_user_dir }}/.kube/config"
|
|
dest: ./kubeconfig
|
|
flat: true
|
|
when: ansible_hostname == hostvars[groups[group_name_master | default('master')][0]]['ansible_hostname']
|