forked from tim/k3s-ansible
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
29 lines
1004 B
Bash
Executable File
29 lines
1004 B
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -Eeuo pipefail
|
|
|
|
repo_root="$(git rev-parse --show-toplevel)"
|
|
site_play="$repo_root/site.yml"
|
|
|
|
# #636: verify the "Pre tasks" play asserts that all k3s_cluster hosts have
|
|
# unique hostnames, so a duplicate-hostname inventory fails fast instead of
|
|
# silently breaking node registration/joining.
|
|
grep -Fq -- 'Verify all cluster nodes have unique hostnames' "$site_play" || {
|
|
printf 'site.yml is missing the unique-hostname preflight check\n' >&2
|
|
exit 1
|
|
}
|
|
|
|
# The check must deduplicate the cluster hostname list via the `unique` filter
|
|
# and compare lengths, i.e. groups['k3s_cluster'] must be referenced.
|
|
grep -Fq -- "groups['k3s_cluster']" "$site_play" || {
|
|
printf 'unique-hostname check does not iterate the k3s_cluster group\n' >&2
|
|
exit 1
|
|
}
|
|
|
|
if ! grep -Eq -- 'cluster_hostnames.*\|.*unique|\| unique' "$site_play"; then
|
|
printf 'unique-hostname check does not deduplicate the hostname list\n' >&2
|
|
exit 1
|
|
fi
|
|
|
|
printf 'Unique hostname preflight regression test passed\n'
|