feat(templates): Template-Bau ohne SSH über eine Bau-Adresse
Ohne SSH zum Node kommt der Guest-Agent jetzt über eine feste Bau-Adresse ins Template: cloud-init setzt Adresse und den Bereitstellungsschlüssel für den Standardbenutzer, ProxDeploy meldet sich per SSH in der VM an, installiert den Agent und entfernt danach Schlüssel, Adresse und cloud-init-Angaben. Dabei korrigiert: der Verbindungstest meldete „Template-Bau per API“ auch ohne Weg, den Agent einzubauen. Im Protokoll erscheinen unveränderte JSON-Felder nicht mehr als geändert. Refs #021 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -43,6 +43,9 @@ type Werte = {
|
||||
templateVmidVon: string;
|
||||
templateVmidBis: string;
|
||||
gastVmidVon: string;
|
||||
bauIp: string;
|
||||
bauGateway: string;
|
||||
bauDns: string;
|
||||
};
|
||||
|
||||
function anfangswerte(server?: ServerSicht): Werte {
|
||||
@@ -60,6 +63,9 @@ function anfangswerte(server?: ServerSicht): Werte {
|
||||
templateVmidVon: String(server?.templateVmidVon ?? 9000),
|
||||
templateVmidBis: String(server?.templateVmidBis ?? 9999),
|
||||
gastVmidVon: String(server?.gastVmidVon ?? 100),
|
||||
bauIp: server?.bauNetz?.ip ?? "",
|
||||
bauGateway: server?.bauNetz?.gateway ?? "",
|
||||
bauDns: server?.bauNetz?.dns.join(", ") ?? "",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -117,12 +123,16 @@ export function ServerFormular({ server }: { server?: ServerSicht }) {
|
||||
setSpeichert(true);
|
||||
setFelder({});
|
||||
setMeldung(null);
|
||||
const { bauIp, bauGateway, bauDns, ...ohneBau } = werte;
|
||||
const rumpf = {
|
||||
...werte,
|
||||
...ohneBau,
|
||||
sshPort: Number(werte.sshPort),
|
||||
templateVmidVon: Number(werte.templateVmidVon),
|
||||
templateVmidBis: Number(werte.templateVmidBis),
|
||||
gastVmidVon: Number(werte.gastVmidVon),
|
||||
bauNetz: bauIp.trim()
|
||||
? { ip: bauIp.trim(), gateway: bauGateway.trim(), dns: bauDns.split(/[\s,;]+/).filter(Boolean) }
|
||||
: null,
|
||||
};
|
||||
try {
|
||||
const gespeichert = bearbeiten
|
||||
@@ -361,6 +371,44 @@ export function ServerFormular({ server }: { server?: ServerSicht }) {
|
||||
</Feld>
|
||||
</div>
|
||||
|
||||
<fieldset className="flex flex-col gap-3">
|
||||
<legend className="text-sm font-medium">Bau-Adresse (optional)</legend>
|
||||
<p className="text-muted text-sm">
|
||||
Feste Adresse für den Vorbereitungsstart beim Template-Bau. Nur nötig ohne SSH zum Node:
|
||||
ProxDeploy meldet sich darüber kurz in der VM an und installiert den Guest-Agent. Braucht
|
||||
Internetzugang.
|
||||
</p>
|
||||
<div className="grid gap-4 sm:grid-cols-3">
|
||||
<Feld id="bauIp" label="IP/Präfix" fehler={felder["bauNetz.ip"]}>
|
||||
<input
|
||||
id="bauIp"
|
||||
className={`${EINGABE_KLASSE} font-mono`}
|
||||
value={werte.bauIp}
|
||||
onChange={(e) => setze("bauIp", e.target.value)}
|
||||
placeholder="10.0.10.250/24"
|
||||
/>
|
||||
</Feld>
|
||||
<Feld id="bauGateway" label="Gateway" fehler={felder["bauNetz.gateway"]}>
|
||||
<input
|
||||
id="bauGateway"
|
||||
className={`${EINGABE_KLASSE} font-mono`}
|
||||
value={werte.bauGateway}
|
||||
onChange={(e) => setze("bauGateway", e.target.value)}
|
||||
placeholder="10.0.10.1"
|
||||
/>
|
||||
</Feld>
|
||||
<Feld id="bauDns" label="DNS" fehler={felder["bauNetz.dns"]}>
|
||||
<input
|
||||
id="bauDns"
|
||||
className={`${EINGABE_KLASSE} font-mono`}
|
||||
value={werte.bauDns}
|
||||
onChange={(e) => setze("bauDns", e.target.value)}
|
||||
placeholder="10.0.10.1"
|
||||
/>
|
||||
</Feld>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<Schalter
|
||||
id="sshAktiv"
|
||||
label="SSH zu den Nodes nutzen"
|
||||
|
||||
Reference in New Issue
Block a user