Files
cluster-knaster/platform/proxmox/scripts/refresh-vm-access.sh
T
Robert RappandClaude Opus 5.5 23d6e36028
ci / test (push) Successful in 28s
gpu-vms: DHCP-Client-ID auf MAC, Docker-Runtime als Aufgabe, Zugang nach Neustart auffrischen
Nach dem Treiber-Neustart hatten gpu-pve44 und gpu-pve46 ihre DHCP-Adressen
getauscht; die strenge Hostschlüssel-Prüfung hat den Lauf gestoppt. netplan
nutzt jetzt die MAC als Client-ID (Voraussetzung für Reservierungen, D5).
Der Handler für nvidia-ctk ist eine idempotente Aufgabe, vor dem Neustart
werden Handler ausgeführt. scripts/refresh-vm-access.sh holt Adressen aus
dem Agenten, schreibt das Inventar und trägt die Hostschlüssel ein.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:39:25 +02:00

28 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Zugang zu den GPU-VMs auffrischen (läuft auf ops, im Verzeichnis platform/proxmox/tofu, mit
# geladenem /root/.config/knaster/tofu.env). Nötig nach jedem VM-Neustart, solange die Gäste per
# DHCP ohne Reservierung laufen (D5): Adressen können wechseln (12.10. zwei VMs vertauscht).
#
# 1. aktuelle Adressen per qemu-guest-agent in den tofu-State holen (refresh-only)
# 2. ../ansible/inventory.generated.yml neu schreiben
# 3. Hostschlüssel über den Agenten lesen (Vertrauensweg Proxmox statt ssh-keyscan) und in
# ~/.ssh/known_hosts eintragen; vorher wartet das Skript, bis cloud-init fertig ist.
set -euo pipefail
tofu apply -refresh-only -auto-approve -input=false -no-color >/dev/null
tofu output -raw ansible_inventory > ../ansible/inventory.generated.yml
tofu output -json gpu_vms | python3 -c '
import json, sys
for name, v in json.load(sys.stdin).items():
if v["ipv4"]:
print(name, v["node"], v["vmid"], v["ipv4"])
' | while read -r name node vmid ip; do
ssh -n "$node" "qm guest exec $vmid --timeout 900 -- cloud-init status --wait" >/dev/null || true
key=$(ssh -n "$node" "qm guest exec $vmid -- cat /etc/ssh/ssh_host_ed25519_key.pub" \
| python3 -c 'import json, sys; print(json.load(sys.stdin)["out-data"].strip())')
ssh-keygen -R "$ip" >/dev/null 2>&1 || true
echo "$ip $key" >> ~/.ssh/known_hosts
echo "$name ($ip): $(ssh-keygen -lf <(echo "$ip $key") | awk '{print $2}')"
done