Der Installer berechnet den SHA-256 über das vollständige OVA und liest die OVF-
Metadaten. Er lehnt unter anderem zu kleine Boot- oder Scratch-Volumes, unbekannte
Availability Zones und Machine Types mit zu wenig CPU oder RAM vor dem Image-Upload
ab. Ohne explizite Availability Zone wird bevorzugt eine Zone mit dem Suffix -m
ausgewählt; ohne Machine Type wird der kleinste passende Typ gewählt.
Das OVA wird über das Label coriolis-sha256 identifiziert. Wegen des STACKIT-
Label-Limits werden die ersten 32 Hex-Zeichen gespeichert. Ein verwendbares Image
trägt zusätzlich coriolis-normalized=agent-v2.
Die Suchreihenfolge ist:
- lokales, verfügbares Image im Zielprojekt;
- für das Zielprojekt sichtbares, geteiltes Image;
- ein noch laufender eigener Image-Import;
- Suche beziehungsweise Import im konfigurierten Image-Eigentümerprojekt.
Ein explizites image.id umgeht die automatische Auswahl, muss bei aktiviertem
Agent-Ablauf aber ebenfalls als agent-v2 normalisiert sein. Ein CREATING-Import
wird beobachtet; ein eigener, seit mehr als 30 Minuten unveränderter Import wird als
stale entfernt und neu erzeugt.
Nur wenn kein geeignetes Image existiert, legt der Installer temporäre Ressourcen an:
- eine Ubuntu-Hilfs-VM mit Server Agent;
- ein Quellvolume in Größe der späteren Boot-Disk;
- ein Scratchvolume für eingehende VMDK und ausgehende QCOW2-Datei;
- eine temporäre Public IP, Security Group und ein einmaliges Ed25519-Keypair.
Der SSH-Hostkey der Hilfs-VM wird zuerst über den unabhängigen STACKIT Server Agent ausgelesen. Der anschließende Go-SSH-Transfer akzeptiert ausschließlich diesen gepinnten Hostkey. Ein abgebrochener VMDK-Transfer wird anhand der bereits übertragenen Bytezahl fortgesetzt.
Auf der Hilfs-VM geschieht anschließend:
- Installation von
qemu-utils; - VMDK → RAW direkt auf das performante Quellvolume;
- schreibbares Einhängen der Appliance-Rootpartition;
- Offline-Installation und Aktivierung des STACKIT Server Agent;
- Entfernen ausschließlich maschinenspezifischer Agent- und Cloud-init-Zustände;
- RAW → QCOW2 auf das Scratchvolume;
- Prüfung des QCOW2 und Upload über die STACKIT-Image-Upload-URL;
- Warten auf den Image-Status
AVAILABLE.
Das Original-OVA bleibt unverändert. Coriolis-Konfiguration, Support-SSH und Appliance-Anwendungsdaten werden bei der Normalisierung nicht verändert.
Nach erfolgreichem Import werden die Hilfs-VM, die beiden Volumes, die temporäre Public IP, Security Group und das Keypair entfernt. Bei einem frühen Fehler bleiben gelabelte Volumes gegebenenfalls für Diagnose und Wiederaufnahme erhalten. Ein Folgelauf erkennt sie und bereinigt veraltete Hilfszugänge.
Netzwerk und Security Group werden anhand ihrer Namen wiederverwendet, sofern keine
Netzwerk-ID vorgegeben wurde. Die Appliance-VM wird anhand von server.id oder
server.name gefunden. Eine neue VM erhält das normalisierte Image als Bootquelle,
die konfigurierte Performanceklasse und den Server Agent.
Für die Appliance sowie die Normalisierungsvolumes ist
storage_premium_perf12 der empfohlene Default. Konvertierung, Image-Upload,
Migrationen und Backups erzeugen anhaltende I/O-Last; perf1 ist für diese Datenpfade
häufig zu langsam. Nur die kleine Betriebssystemdisk der Hilfs-VM verwendet fest
storage_premium_perf1, weil die Nutzdaten auf den separaten perf12-Volumes liegen.
Nach dem Boot wartet der Installer auf den STACKIT Server Agent und führt den Bootstrap über Run Command im Basisbetriebssystem aus. Der Coriolis-Support-SSH- Dienst, dessen Accounts und dessen Konfiguration werden nicht verändert.
Der Bootstrap:
- setzt den Hostnamen;
- wartet auf Keystone;
- setzt das Kennwort des Coriolis-Administrators
adminin der Domaindefault; - persistiert das Kennwort in Kollas maßgeblicher
passwords.ymlund aktualisiert die lokale OpenRC-Datei; - führt die herstellereigene Exposure-Logik aus;
- prüft danach die regenerierte OpenRC-Datei, eine echte Keystone-Anmeldung und den lokalen Webdienst;
- speichert Kennwort und Idempotenzmarker unter
/var/lib/coriolis-stackitmit Root-only-Berechtigungen.
Ist bootstrap.admin_password leer, wird einmalig ein zufälliges, Appliance-
spezifisches Kennwort erzeugt. Wiederholungen liefern dasselbe Kennwort zurück.
Im Direct-Modus verwendet der Installer in dieser Reihenfolge:
- eine bereits an der Appliance-NIC vorhandene Public IP;
- die über
public_ip_idoderpublic_ip_addressverlangte freie IP; - eine freie, vom Installer verwaltete Public IP;
- eine neu reservierte Public IP.
Eine verlangte IP, die an eine andere NIC gebunden ist, führt zum sicheren Abbruch.
Der A-Record wird angelegt oder auf die aktuelle Adresse aktualisiert. Eine DNS-Zone
kann über ID oder Namen ausgewählt und bei create_zone: true automatisch erzeugt
werden.
Im empfohlenen Direct-Modus erzeugt die Appliance selbst einen RSA-Schlüssel und einen CSR für den FQDN. Der private Schlüssel verlässt die VM nie. Das Go-Programm führt die ACME-DNS-01-Challenge über STACKIT DNS aus und überträgt nur Leaf- und Issuer-Zertifikate zurück auf die Appliance.
Vor der Aktivierung werden Hostname, Restlaufzeit, Key-Paar und vollständige Chain
geprüft. Der Installer sichert die aktiven Herstellerdateien, installiert die neue
Kette und ruft expose_coriolis.py mit der privaten Interface-IP auf. Anschließend
werden ausschließlich coriolis-web-proxy und coriolis-api neu geladen. Die
tatsächlich auf 443 und 5000 ausgelieferten Leaf-Fingerprints müssen mit der aktiven
Datei übereinstimmen. Bei einem Fehler wird auf die gesicherten Dateien und den
vorherigen Hostnamen zurückgerollt.
Ein gültiges Zertifikat wird wiederverwendet. Auch wenn die Datei bereits korrekt, der Dienst aber noch nicht neu geladen ist, wird das vorhandene Key-Paar genutzt; es wird dafür kein unnötiges neues Zertifikat angefordert.
Mit exposure.mode: application_load_balancer terminiert ein STACKIT ALB HTTPS auf
Port 443. Das Zertifikat wird per DNS-01 ausgestellt und im STACKIT Certificate
Service gespeichert. Der ALB leitet standardmäßig unverschlüsselt auf Port 80 der
privaten Appliance-IP weiter.
Der ALB ist optional. Für den Standardfall wird das Zertifikat direkt in der Appliance installiert, damit Weboberfläche und Coriolis-Dienste möglichst nah am Herstellerprodukt bleiben. Der ALB betrifft nur den konfigurierten Layer-7-Webpfad; Migrations- und Worker-Verbindungen werden nicht automatisch durch ihn geführt.