#!/usr/bin/env bash set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" LEDGER="${HOMELAB_GOLDEN_LEDGER:-${REPO_ROOT}/infra/pimox/golden-image-ledger.yml}" case "${1:-show}" in show) sed -n '1,220p' "$LEDGER" ;; check) if [ ! -s "$LEDGER" ]; then echo "missing ledger: $LEDGER" >&2 exit 1 fi python3 - "$LEDGER" <<'PY' import sys try: import yaml except ImportError: print("yaml module unavailable; ledger file exists") raise SystemExit(0) path = sys.argv[1] with open(path, encoding="utf-8") as handle: doc = yaml.safe_load(handle) or {} required = [ "template.vmid", "template.name", "os.distribution", "os.release", "os.architecture", "kubernetes.kubelet", "kubernetes.kubeadm", "kubernetes.kubectl", ] missing = [] for dotted in required: value = doc for part in dotted.split("."): value = value.get(part) if isinstance(value, dict) else None if value in (None, ""): missing.append(dotted) if missing: print("missing required ledger fields:") for item in missing: print(f" {item}") raise SystemExit(1) print(f"ledger ok: {path}") PY ;; update-stamp) echo "Manual edit is preferred so image URLs/checksums stay reviewable: $LEDGER" >&2 exit 1 ;; *) echo "Usage: ./jeannie golden-ledger {show|check}" >&2 exit 1 ;; esac