Default cluster workers to Pimox only
This commit is contained in:
parent
21adbd5628
commit
349ffd006e
|
|
@ -802,10 +802,11 @@ select VM workers. Resume the runtime with:
|
|||
./jeannie start-cluster
|
||||
```
|
||||
|
||||
To exclude the Raspberry Pi from the Kubernetes cluster, set
|
||||
`LAB_INCLUDE_RASPBERRY_WORKER=false`. To manage workers manually instead, add
|
||||
entries to
|
||||
`bootstrap/cluster/variables.tf` or a `.tfvars` file:
|
||||
Kubernetes worker generation defaults to automated Pimox workers only. The
|
||||
Raspberry Pi stays out of the cluster unless `LAB_INCLUDE_RASPBERRY_WORKER=true`
|
||||
is set. Stale manual workers in `.lab/manual-workers.tsv` are ignored unless
|
||||
`LAB_INCLUDE_MANUAL_WORKERS=true` is set. To manage workers manually instead,
|
||||
add entries to `bootstrap/cluster/variables.tf` or a `.tfvars` file:
|
||||
|
||||
```hcl
|
||||
worker_nodes = {
|
||||
|
|
|
|||
|
|
@ -802,10 +802,11 @@ select VM workers. Resume the runtime with:
|
|||
./{{ main_script }} start-cluster
|
||||
```
|
||||
|
||||
To exclude the Raspberry Pi from the Kubernetes cluster, set
|
||||
`LAB_INCLUDE_RASPBERRY_WORKER=false`. To manage workers manually instead, add
|
||||
entries to
|
||||
`bootstrap/cluster/variables.tf` or a `.tfvars` file:
|
||||
Kubernetes worker generation defaults to automated Pimox workers only. The
|
||||
Raspberry Pi stays out of the cluster unless `LAB_INCLUDE_RASPBERRY_WORKER=true`
|
||||
is set. Stale manual workers in `.lab/manual-workers.tsv` are ignored unless
|
||||
`LAB_INCLUDE_MANUAL_WORKERS=true` is set. To manage workers manually instead,
|
||||
add entries to `bootstrap/cluster/variables.tf` or a `.tfvars` file:
|
||||
|
||||
```hcl
|
||||
worker_nodes = {
|
||||
|
|
|
|||
|
|
@ -620,7 +620,9 @@ script name.
|
|||
: Generated Pimox worker inventory.
|
||||
|
||||
`.lab/manual-workers.tsv`
|
||||
: User-managed manual worker inventory.
|
||||
: User-managed manual worker inventory. Ignored by default; set
|
||||
`LAB_INCLUDE_MANUAL_WORKERS=true` to merge it into the generated cluster worker
|
||||
var file.
|
||||
|
||||
`$HOMELAB_STATE_DIR/logs`
|
||||
: Jeannie command logs.
|
||||
|
|
|
|||
29
jeannie
29
jeannie
|
|
@ -759,7 +759,10 @@ doctor_versions() {
|
|||
}
|
||||
|
||||
truthy() {
|
||||
case "${1,,}" in
|
||||
local value
|
||||
|
||||
value="$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')"
|
||||
case "${value}" in
|
||||
1 | true | yes | on)
|
||||
return 0
|
||||
;;
|
||||
|
|
@ -770,7 +773,10 @@ truthy() {
|
|||
}
|
||||
|
||||
disabled_value() {
|
||||
case "${1,,}" in
|
||||
local value
|
||||
|
||||
value="$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')"
|
||||
case "${value}" in
|
||||
0 | false | no | off | disabled)
|
||||
return 0
|
||||
;;
|
||||
|
|
@ -1745,12 +1751,21 @@ prepare_cluster_worker_var_file() {
|
|||
local manual_spec_file="${REPO_ROOT}/.lab/manual-workers.tsv"
|
||||
local pimox_spec_file="${REPO_ROOT}/.lab/pimox-workers.tsv"
|
||||
local var_file="${REPO_ROOT}/.lab/cluster-workers.auto.tfvars.json"
|
||||
local include_manual="${LAB_INCLUDE_MANUAL_WORKERS:-false}"
|
||||
local -a spec_files=()
|
||||
|
||||
export LAB_INCLUDE_RASPBERRY_WORKER="${LAB_INCLUDE_RASPBERRY_WORKER:-${include_raspberry_default}}"
|
||||
|
||||
mkdir -p "${REPO_ROOT}/.lab"
|
||||
ensure_static_pimox_worker_spec_file "${pimox_spec_file}"
|
||||
write_cluster_worker_var_file "${var_file}" "${manual_spec_file}" "${pimox_spec_file}"
|
||||
if truthy "${include_manual}"; then
|
||||
spec_files+=("${manual_spec_file}")
|
||||
elif ! disabled_value "${include_manual}"; then
|
||||
echo "LAB_INCLUDE_MANUAL_WORKERS must be true or false." >&2
|
||||
return 1
|
||||
fi
|
||||
spec_files+=("${pimox_spec_file}")
|
||||
write_cluster_worker_var_file "${var_file}" "${spec_files[@]}"
|
||||
export LAB_CLUSTER_VAR_FILE="${var_file}"
|
||||
}
|
||||
|
||||
|
|
@ -4703,7 +4718,7 @@ apps() {
|
|||
|
||||
ensure_cluster_worker_var_file() {
|
||||
if [[ -z "${LAB_CLUSTER_VAR_FILE:-}" ]]; then
|
||||
prepare_cluster_worker_var_file true
|
||||
prepare_cluster_worker_var_file false
|
||||
fi
|
||||
if truthy "${TF_VAR_allow_empty_worker_nodes:-false}"; then
|
||||
return 0
|
||||
|
|
@ -4865,7 +4880,7 @@ plan_homelab() {
|
|||
|
||||
if [[ "${target}" == "all" ]]; then
|
||||
if [[ -z "${LAB_CLUSTER_VAR_FILE:-}" ]]; then
|
||||
prepare_cluster_worker_var_file true
|
||||
prepare_cluster_worker_var_file false
|
||||
fi
|
||||
stacks=(
|
||||
"bootstrap/provisioning"
|
||||
|
|
@ -4877,7 +4892,7 @@ plan_homelab() {
|
|||
else
|
||||
stack="$(tofu_stack_from_plan_target "${target}")"
|
||||
if [[ "${stack}" == "bootstrap/cluster" && -z "${LAB_CLUSTER_VAR_FILE:-}" ]]; then
|
||||
prepare_cluster_worker_var_file true
|
||||
prepare_cluster_worker_var_file false
|
||||
fi
|
||||
stacks=("${stack}")
|
||||
fi
|
||||
|
|
@ -4893,7 +4908,7 @@ rebuild_cluster() {
|
|||
require_debian_server "rebuild-cluster"
|
||||
|
||||
export WORKER_SSH_TARGETS="${WORKER_SSH_TARGETS:-}"
|
||||
export LAB_INCLUDE_RASPBERRY_WORKER="${LAB_INCLUDE_RASPBERRY_WORKER:-true}"
|
||||
export LAB_INCLUDE_RASPBERRY_WORKER="${LAB_INCLUDE_RASPBERRY_WORKER:-false}"
|
||||
export LAB_PIMOX_TEMPLATE_REPLACE_EXISTING="${LAB_PIMOX_TEMPLATE_REPLACE_EXISTING:-true}"
|
||||
export LAB_PIMOX_WORKER_COUNT="${LAB_PIMOX_WORKER_COUNT:-2}"
|
||||
export LAB_PIMOX_WORKER_REPLACE_EXISTING="${LAB_PIMOX_WORKER_REPLACE_EXISTING:-true}"
|
||||
|
|
|
|||
|
|
@ -168,6 +168,7 @@ test_cluster_worker_targets_include_pimox_and_manual_workers() {
|
|||
|
||||
test_prepare_cluster_worker_var_file_merges_manual_and_pimox_workers() {
|
||||
unset LAB_INCLUDE_RASPBERRY_WORKER
|
||||
LAB_INCLUDE_MANUAL_WORKERS=true
|
||||
LAB_PIMOX_WORKER_NODE_LABELS_JSON='{"homelab.dev/node-role":"app","homelab.dev/storage":"ssd"}'
|
||||
LAB_MANUAL_WORKER_NODE_LABELS_JSON='{"homelab.dev/node-role":"manual","homelab.dev/storage":"custom"}'
|
||||
prepare_cluster_worker_var_file false
|
||||
|
|
@ -190,7 +191,26 @@ if labels["manual01"]["homelab.dev/node-role"] != "manual":
|
|||
raise SystemExit("manual labels were not applied")
|
||||
PY
|
||||
pass "worker var file merges manual and Pimox workers"
|
||||
unset LAB_PIMOX_WORKER_NODE_LABELS_JSON LAB_MANUAL_WORKER_NODE_LABELS_JSON LAB_CLUSTER_VAR_FILE LAB_INCLUDE_RASPBERRY_WORKER
|
||||
unset LAB_INCLUDE_MANUAL_WORKERS LAB_PIMOX_WORKER_NODE_LABELS_JSON LAB_MANUAL_WORKER_NODE_LABELS_JSON LAB_CLUSTER_VAR_FILE LAB_INCLUDE_RASPBERRY_WORKER
|
||||
}
|
||||
|
||||
test_prepare_cluster_worker_var_file_excludes_manual_by_default() {
|
||||
unset LAB_INCLUDE_RASPBERRY_WORKER LAB_INCLUDE_MANUAL_WORKERS
|
||||
prepare_cluster_worker_var_file false
|
||||
python3 - "${LAB_DIR}/cluster-workers.auto.tfvars.json" <<'PY'
|
||||
import json
|
||||
import sys
|
||||
|
||||
with open(sys.argv[1], encoding="utf-8") as handle:
|
||||
document = json.load(handle)
|
||||
nodes = document["worker_nodes"]
|
||||
if "manual01" in nodes:
|
||||
raise SystemExit("manual worker was included without LAB_INCLUDE_MANUAL_WORKERS=true")
|
||||
if set(nodes) != {"pimox01", "pimox02", "pimox03"}:
|
||||
raise SystemExit(f"unexpected worker keys: {sorted(nodes)}")
|
||||
PY
|
||||
pass "worker var file excludes manual workers by default"
|
||||
unset LAB_CLUSTER_VAR_FILE LAB_INCLUDE_RASPBERRY_WORKER LAB_INCLUDE_MANUAL_WORKERS
|
||||
}
|
||||
|
||||
test_prepare_cluster_worker_var_file_can_include_raspberry_worker() {
|
||||
|
|
@ -380,6 +400,7 @@ test_configured_worker_count_cannot_hide_existing_workers
|
|||
test_configured_worker_count_can_expand_target_set
|
||||
test_cluster_worker_targets_include_pimox_and_manual_workers
|
||||
test_prepare_cluster_worker_var_file_merges_manual_and_pimox_workers
|
||||
test_prepare_cluster_worker_var_file_excludes_manual_by_default
|
||||
test_prepare_cluster_worker_var_file_can_include_raspberry_worker
|
||||
test_prepare_cluster_worker_var_file_rebuilds_static_pimox_spec
|
||||
test_report_renderer_hides_ok_links
|
||||
|
|
|
|||
Loading…
Reference in New Issue