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
|
./jeannie start-cluster
|
||||||
```
|
```
|
||||||
|
|
||||||
To exclude the Raspberry Pi from the Kubernetes cluster, set
|
Kubernetes worker generation defaults to automated Pimox workers only. The
|
||||||
`LAB_INCLUDE_RASPBERRY_WORKER=false`. To manage workers manually instead, add
|
Raspberry Pi stays out of the cluster unless `LAB_INCLUDE_RASPBERRY_WORKER=true`
|
||||||
entries to
|
is set. Stale manual workers in `.lab/manual-workers.tsv` are ignored unless
|
||||||
`bootstrap/cluster/variables.tf` or a `.tfvars` file:
|
`LAB_INCLUDE_MANUAL_WORKERS=true` is set. To manage workers manually instead,
|
||||||
|
add entries to `bootstrap/cluster/variables.tf` or a `.tfvars` file:
|
||||||
|
|
||||||
```hcl
|
```hcl
|
||||||
worker_nodes = {
|
worker_nodes = {
|
||||||
|
|
|
||||||
|
|
@ -802,10 +802,11 @@ select VM workers. Resume the runtime with:
|
||||||
./{{ main_script }} start-cluster
|
./{{ main_script }} start-cluster
|
||||||
```
|
```
|
||||||
|
|
||||||
To exclude the Raspberry Pi from the Kubernetes cluster, set
|
Kubernetes worker generation defaults to automated Pimox workers only. The
|
||||||
`LAB_INCLUDE_RASPBERRY_WORKER=false`. To manage workers manually instead, add
|
Raspberry Pi stays out of the cluster unless `LAB_INCLUDE_RASPBERRY_WORKER=true`
|
||||||
entries to
|
is set. Stale manual workers in `.lab/manual-workers.tsv` are ignored unless
|
||||||
`bootstrap/cluster/variables.tf` or a `.tfvars` file:
|
`LAB_INCLUDE_MANUAL_WORKERS=true` is set. To manage workers manually instead,
|
||||||
|
add entries to `bootstrap/cluster/variables.tf` or a `.tfvars` file:
|
||||||
|
|
||||||
```hcl
|
```hcl
|
||||||
worker_nodes = {
|
worker_nodes = {
|
||||||
|
|
|
||||||
|
|
@ -620,7 +620,9 @@ script name.
|
||||||
: Generated Pimox worker inventory.
|
: Generated Pimox worker inventory.
|
||||||
|
|
||||||
`.lab/manual-workers.tsv`
|
`.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`
|
`$HOMELAB_STATE_DIR/logs`
|
||||||
: Jeannie command logs.
|
: Jeannie command logs.
|
||||||
|
|
|
||||||
29
jeannie
29
jeannie
|
|
@ -759,7 +759,10 @@ doctor_versions() {
|
||||||
}
|
}
|
||||||
|
|
||||||
truthy() {
|
truthy() {
|
||||||
case "${1,,}" in
|
local value
|
||||||
|
|
||||||
|
value="$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
case "${value}" in
|
||||||
1 | true | yes | on)
|
1 | true | yes | on)
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
|
@ -770,7 +773,10 @@ truthy() {
|
||||||
}
|
}
|
||||||
|
|
||||||
disabled_value() {
|
disabled_value() {
|
||||||
case "${1,,}" in
|
local value
|
||||||
|
|
||||||
|
value="$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
case "${value}" in
|
||||||
0 | false | no | off | disabled)
|
0 | false | no | off | disabled)
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
|
@ -1745,12 +1751,21 @@ prepare_cluster_worker_var_file() {
|
||||||
local manual_spec_file="${REPO_ROOT}/.lab/manual-workers.tsv"
|
local manual_spec_file="${REPO_ROOT}/.lab/manual-workers.tsv"
|
||||||
local pimox_spec_file="${REPO_ROOT}/.lab/pimox-workers.tsv"
|
local pimox_spec_file="${REPO_ROOT}/.lab/pimox-workers.tsv"
|
||||||
local var_file="${REPO_ROOT}/.lab/cluster-workers.auto.tfvars.json"
|
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}}"
|
export LAB_INCLUDE_RASPBERRY_WORKER="${LAB_INCLUDE_RASPBERRY_WORKER:-${include_raspberry_default}}"
|
||||||
|
|
||||||
mkdir -p "${REPO_ROOT}/.lab"
|
mkdir -p "${REPO_ROOT}/.lab"
|
||||||
ensure_static_pimox_worker_spec_file "${pimox_spec_file}"
|
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}"
|
export LAB_CLUSTER_VAR_FILE="${var_file}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4703,7 +4718,7 @@ apps() {
|
||||||
|
|
||||||
ensure_cluster_worker_var_file() {
|
ensure_cluster_worker_var_file() {
|
||||||
if [[ -z "${LAB_CLUSTER_VAR_FILE:-}" ]]; then
|
if [[ -z "${LAB_CLUSTER_VAR_FILE:-}" ]]; then
|
||||||
prepare_cluster_worker_var_file true
|
prepare_cluster_worker_var_file false
|
||||||
fi
|
fi
|
||||||
if truthy "${TF_VAR_allow_empty_worker_nodes:-false}"; then
|
if truthy "${TF_VAR_allow_empty_worker_nodes:-false}"; then
|
||||||
return 0
|
return 0
|
||||||
|
|
@ -4865,7 +4880,7 @@ plan_homelab() {
|
||||||
|
|
||||||
if [[ "${target}" == "all" ]]; then
|
if [[ "${target}" == "all" ]]; then
|
||||||
if [[ -z "${LAB_CLUSTER_VAR_FILE:-}" ]]; then
|
if [[ -z "${LAB_CLUSTER_VAR_FILE:-}" ]]; then
|
||||||
prepare_cluster_worker_var_file true
|
prepare_cluster_worker_var_file false
|
||||||
fi
|
fi
|
||||||
stacks=(
|
stacks=(
|
||||||
"bootstrap/provisioning"
|
"bootstrap/provisioning"
|
||||||
|
|
@ -4877,7 +4892,7 @@ plan_homelab() {
|
||||||
else
|
else
|
||||||
stack="$(tofu_stack_from_plan_target "${target}")"
|
stack="$(tofu_stack_from_plan_target "${target}")"
|
||||||
if [[ "${stack}" == "bootstrap/cluster" && -z "${LAB_CLUSTER_VAR_FILE:-}" ]]; then
|
if [[ "${stack}" == "bootstrap/cluster" && -z "${LAB_CLUSTER_VAR_FILE:-}" ]]; then
|
||||||
prepare_cluster_worker_var_file true
|
prepare_cluster_worker_var_file false
|
||||||
fi
|
fi
|
||||||
stacks=("${stack}")
|
stacks=("${stack}")
|
||||||
fi
|
fi
|
||||||
|
|
@ -4893,7 +4908,7 @@ rebuild_cluster() {
|
||||||
require_debian_server "rebuild-cluster"
|
require_debian_server "rebuild-cluster"
|
||||||
|
|
||||||
export WORKER_SSH_TARGETS="${WORKER_SSH_TARGETS:-}"
|
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_TEMPLATE_REPLACE_EXISTING="${LAB_PIMOX_TEMPLATE_REPLACE_EXISTING:-true}"
|
||||||
export LAB_PIMOX_WORKER_COUNT="${LAB_PIMOX_WORKER_COUNT:-2}"
|
export LAB_PIMOX_WORKER_COUNT="${LAB_PIMOX_WORKER_COUNT:-2}"
|
||||||
export LAB_PIMOX_WORKER_REPLACE_EXISTING="${LAB_PIMOX_WORKER_REPLACE_EXISTING:-true}"
|
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() {
|
test_prepare_cluster_worker_var_file_merges_manual_and_pimox_workers() {
|
||||||
unset LAB_INCLUDE_RASPBERRY_WORKER
|
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_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"}'
|
LAB_MANUAL_WORKER_NODE_LABELS_JSON='{"homelab.dev/node-role":"manual","homelab.dev/storage":"custom"}'
|
||||||
prepare_cluster_worker_var_file false
|
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")
|
raise SystemExit("manual labels were not applied")
|
||||||
PY
|
PY
|
||||||
pass "worker var file merges manual and Pimox workers"
|
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() {
|
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_configured_worker_count_can_expand_target_set
|
||||||
test_cluster_worker_targets_include_pimox_and_manual_workers
|
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_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_can_include_raspberry_worker
|
||||||
test_prepare_cluster_worker_var_file_rebuilds_static_pimox_spec
|
test_prepare_cluster_worker_var_file_rebuilds_static_pimox_spec
|
||||||
test_report_renderer_hides_ok_links
|
test_report_renderer_hides_ok_links
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue