/** * Rendert Profile für eine Distribution auf stdout – zum Ansehen und für die Integrationsprüfung * in einem Container: `pnpm exec tsx scripts/profil-rendern.ts debian-13 base,docker server=zbx.local` */ import { adapterFuer } from "@/engine/adapter"; import { katalogLaden } from "@/engine/katalog/laden"; import { profileAufloesen } from "@/engine/profile/aufloesen"; import { profileRendern } from "@/engine/profile/rendern"; const [distroId = "debian-13", auswahl = "base", ...zuweisungen] = process.argv.slice(2); const katalog = await katalogLaden("catalog"); const distro = katalog.distributionen.find((d) => d.eintrag.id === distroId)?.eintrag; if (!distro) throw new Error(`Unbekannte Distribution ${distroId}`); const profile = new Map(katalog.profile.map((p) => [p.eintrag.id, p.eintrag])); const eingaben: Record> = {}; for (const z of zuweisungen) { const [name, wert] = z.split("="); for (const p of profile.values()) if (p.variables.some((v) => v.name === name)) (eingaben[p.id] ??= {})[name!] = wert!; } const aufloesung = profileAufloesen(auswahl.split(","), profile, distro.family, eingaben); if (!aufloesung.ok) { console.error(aufloesung.fehler); process.exit(1); } const adapter = adapterFuer(distro.family)!; const { skript } = profileRendern( aufloesung.profile, adapter, { os: distro.os, gast: { name: "testgast", benutzer: "florian" }, }, [ adapter.benutzerAnlegen({ name: "florian", sshSchluessel: ["ssh-ed25519 AAAAtest florian@test"], sudo: true, }), ], ); process.stdout.write(skript);