feat: make kubeadm workflows auto-scale with terraform outputs
All checks were successful
Terraform Plan / Terraform Plan (push) Successful in 19s
All checks were successful
Terraform Plan / Terraform Plan (push) Successful in 19s
This commit is contained in:
40
nixos/kubeadm/scripts/render-inventory-from-tf-output.py
Executable file
40
nixos/kubeadm/scripts/render-inventory-from-tf-output.py
Executable file
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
def natural_key(name: str):
|
||||
m = re.match(r"^([a-zA-Z-]+)-(\d+)$", name)
|
||||
if m:
|
||||
return (m.group(1), int(m.group(2)))
|
||||
return (name, 0)
|
||||
|
||||
|
||||
def map_to_pairs(items: dict[str, str]) -> str:
|
||||
ordered = sorted(items.items(), key=lambda kv: natural_key(kv[0]))
|
||||
return " ".join(f"{k}={v}" for k, v in ordered)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
payload = json.load(sys.stdin)
|
||||
|
||||
cp_map = payload.get("control_plane_vm_ipv4", {}).get("value", {})
|
||||
wk_map = payload.get("worker_vm_ipv4", {}).get("value", {})
|
||||
|
||||
if not cp_map or not wk_map:
|
||||
raise SystemExit("Missing control_plane_vm_ipv4 or worker_vm_ipv4 in terraform output")
|
||||
|
||||
ssh_user = os.environ.get("KUBEADM_SSH_USER", "").strip() or "micqdf"
|
||||
|
||||
print(f"SSH_USER={ssh_user}")
|
||||
print("PRIMARY_CONTROL_PLANE=cp-1")
|
||||
print(f"CONTROL_PLANES=\"{map_to_pairs(cp_map)}\"")
|
||||
print(f"WORKERS=\"{map_to_pairs(wk_map)}\"")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user