Preserve manual worker topology file
This commit is contained in:
parent
8cd0b14e5e
commit
1a8bf9a77d
62
jeannie
62
jeannie
|
|
@ -957,8 +957,11 @@ sudo '${qm_bin}' start '${vmid}'"
|
||||||
}
|
}
|
||||||
|
|
||||||
write_cluster_worker_var_file() {
|
write_cluster_worker_var_file() {
|
||||||
local spec_file="$1"
|
local var_file="$1"
|
||||||
local var_file="$2"
|
local default_platform_labels_json='{"node-role.kubernetes.io/worker":"worker","homelab.dev/node-role":"app","homelab.dev/storage":"ssd","homelab.dev/workload-class":"platform"}'
|
||||||
|
local pimox_labels_json="${LAB_PIMOX_WORKER_NODE_LABELS_JSON:-${default_platform_labels_json}}"
|
||||||
|
local manual_labels_json="${LAB_MANUAL_WORKER_NODE_LABELS_JSON:-${pimox_labels_json}}"
|
||||||
|
shift
|
||||||
|
|
||||||
LAB_INCLUDE_RASPBERRY_WORKER="${LAB_INCLUDE_RASPBERRY_WORKER:-false}" \
|
LAB_INCLUDE_RASPBERRY_WORKER="${LAB_INCLUDE_RASPBERRY_WORKER:-false}" \
|
||||||
LAB_RASPBERRY_HOST="${LAB_RASPBERRY_HOST:-192.168.100.89}" \
|
LAB_RASPBERRY_HOST="${LAB_RASPBERRY_HOST:-192.168.100.89}" \
|
||||||
|
|
@ -966,18 +969,22 @@ write_cluster_worker_var_file() {
|
||||||
LAB_RASPBERRY_NODE_NAME="${LAB_RASPBERRY_NODE_NAME:-raspberry}" \
|
LAB_RASPBERRY_NODE_NAME="${LAB_RASPBERRY_NODE_NAME:-raspberry}" \
|
||||||
LAB_RASPBERRY_SSH_KEY_PATH="${LAB_RASPBERRY_SSH_KEY_PATH:-/home/jv/.ssh/id_ed25519}" \
|
LAB_RASPBERRY_SSH_KEY_PATH="${LAB_RASPBERRY_SSH_KEY_PATH:-/home/jv/.ssh/id_ed25519}" \
|
||||||
LAB_RASPBERRY_NODE_LABELS_JSON="${LAB_RASPBERRY_NODE_LABELS_JSON:-{\"node-role.kubernetes.io/worker\":\"worker\",\"homelab.dev/node-role\":\"edge-app\",\"homelab.dev/storage\":\"local\",\"homelab.dev/workload-class\":\"edge\"}}" \
|
LAB_RASPBERRY_NODE_LABELS_JSON="${LAB_RASPBERRY_NODE_LABELS_JSON:-{\"node-role.kubernetes.io/worker\":\"worker\",\"homelab.dev/node-role\":\"edge-app\",\"homelab.dev/storage\":\"local\",\"homelab.dev/workload-class\":\"edge\"}}" \
|
||||||
LAB_PIMOX_WORKER_NODE_LABELS_JSON="${LAB_PIMOX_WORKER_NODE_LABELS_JSON:-{\"node-role.kubernetes.io/worker\":\"worker\",\"homelab.dev/node-role\":\"app\",\"homelab.dev/storage\":\"ssd\",\"homelab.dev/workload-class\":\"platform\"}}" \
|
LAB_MANUAL_WORKER_NODE_LABELS_JSON="${manual_labels_json}" \
|
||||||
python3 - "${spec_file}" "${var_file}" <<'PY'
|
LAB_PIMOX_WORKER_NODE_LABELS_JSON="${pimox_labels_json}" \
|
||||||
|
python3 - "${var_file}" "$@" <<'PY'
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
from pathlib import Path
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
spec_file, var_file = sys.argv[1:3]
|
var_file = sys.argv[1]
|
||||||
|
spec_files = sys.argv[2:]
|
||||||
nodes = {}
|
nodes = {}
|
||||||
node_labels = {}
|
node_labels = {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
raspberry_labels = json.loads(os.environ["LAB_RASPBERRY_NODE_LABELS_JSON"])
|
raspberry_labels = json.loads(os.environ["LAB_RASPBERRY_NODE_LABELS_JSON"])
|
||||||
|
manual_labels = json.loads(os.environ["LAB_MANUAL_WORKER_NODE_LABELS_JSON"])
|
||||||
pimox_labels = json.loads(os.environ["LAB_PIMOX_WORKER_NODE_LABELS_JSON"])
|
pimox_labels = json.loads(os.environ["LAB_PIMOX_WORKER_NODE_LABELS_JSON"])
|
||||||
except json.JSONDecodeError as exc:
|
except json.JSONDecodeError as exc:
|
||||||
raise SystemExit(f"Invalid node label JSON: {exc}") from exc
|
raise SystemExit(f"Invalid node label JSON: {exc}") from exc
|
||||||
|
|
@ -991,19 +998,30 @@ if os.environ["LAB_INCLUDE_RASPBERRY_WORKER"].lower() not in {"0", "false", "no"
|
||||||
}
|
}
|
||||||
node_labels["raspberrypi"] = raspberry_labels
|
node_labels["raspberrypi"] = raspberry_labels
|
||||||
|
|
||||||
with open(spec_file, encoding="utf-8") as handle:
|
for spec_file in spec_files:
|
||||||
for line in handle:
|
path = Path(spec_file)
|
||||||
line = line.rstrip("\n")
|
if not path.exists() or path.stat().st_size == 0:
|
||||||
if not line:
|
continue
|
||||||
continue
|
labels = pimox_labels if path.name == "pimox-workers.tsv" else manual_labels
|
||||||
key, host, user, node_name, ssh_key_path = line.split("\t")
|
with path.open(encoding="utf-8") as handle:
|
||||||
nodes[key] = {
|
for line_number, line in enumerate(handle, start=1):
|
||||||
"host": host,
|
line = line.rstrip("\n")
|
||||||
"user": user,
|
if not line or line.startswith("#"):
|
||||||
"node_name": node_name,
|
continue
|
||||||
"ssh_key_path": ssh_key_path,
|
try:
|
||||||
}
|
key, host, user, node_name, ssh_key_path = line.split("\t")
|
||||||
node_labels[key] = pimox_labels
|
except ValueError as exc:
|
||||||
|
raise SystemExit(
|
||||||
|
f"{spec_file}:{line_number}: expected tab-separated "
|
||||||
|
"key, host, user, node_name, ssh_key_path"
|
||||||
|
) from exc
|
||||||
|
nodes[key] = {
|
||||||
|
"host": host,
|
||||||
|
"user": user,
|
||||||
|
"node_name": node_name,
|
||||||
|
"ssh_key_path": ssh_key_path,
|
||||||
|
}
|
||||||
|
node_labels[key] = labels
|
||||||
|
|
||||||
with open(var_file, "w", encoding="utf-8") as handle:
|
with open(var_file, "w", encoding="utf-8") as handle:
|
||||||
json.dump({"worker_nodes": nodes, "worker_node_labels": node_labels}, handle, indent=2)
|
json.dump({"worker_nodes": nodes, "worker_node_labels": node_labels}, handle, indent=2)
|
||||||
|
|
@ -1013,14 +1031,14 @@ PY
|
||||||
|
|
||||||
prepare_cluster_worker_var_file() {
|
prepare_cluster_worker_var_file() {
|
||||||
local include_raspberry_default="$1"
|
local include_raspberry_default="$1"
|
||||||
local 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 var_file="${REPO_ROOT}/.lab/cluster-workers.auto.tfvars.json"
|
local var_file="${REPO_ROOT}/.lab/cluster-workers.auto.tfvars.json"
|
||||||
|
|
||||||
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"
|
||||||
: >"${spec_file}"
|
write_cluster_worker_var_file "${var_file}" "${manual_spec_file}" "${pimox_spec_file}"
|
||||||
write_cluster_worker_var_file "${spec_file}" "${var_file}"
|
|
||||||
export LAB_CLUSTER_VAR_FILE="${var_file}"
|
export LAB_CLUSTER_VAR_FILE="${var_file}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1447,7 +1465,7 @@ fi" 2>&1)"
|
||||||
"${worker_cpu_affinity}"
|
"${worker_cpu_affinity}"
|
||||||
done
|
done
|
||||||
|
|
||||||
write_cluster_worker_var_file "${spec_file}" "${var_file}"
|
write_cluster_worker_var_file "${var_file}" "${REPO_ROOT}/.lab/manual-workers.tsv" "${spec_file}"
|
||||||
export LAB_CLUSTER_VAR_FILE="${var_file}"
|
export LAB_CLUSTER_VAR_FILE="${var_file}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue