Coriolis/README.MD

116 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ANLEITUNG: Installation des STACKIT Provider Plugins
Dies ist eine Schritt-für-Schritt-Anleitung, um Ihr benutzerdefiniertes STACKIT v2 Provider-Plugin auf einer laufenden Coriolis Appliance zu installieren.
## Schritt 1: Code-Struktur vorbereiten
Stellen Sie sicher, dass Ihre Dateien exakt diese Struktur aufweisen. Sie benötigen einen Projekt-Ordner (z.B. `coriolis_stackit_plugin`) und darin das eigentliche Python-Paket.
```
coriolis_stackit_plugin/
├── setup.py
└── coriolis_stackit/
├── __init__.py
└── provider.py
```
* `setup.py`: Registriert den Provider bei Coriolis.
* `coriolis_stackit/provider.py`: Enthält die `StackitProvider`-Klasse inkl. aller Worker- und Datentransfer-Funktionen.
> **Abhängigkeiten:**
> Das Plugin benötigt mindestens `requests>=2.20.0` und `boto3>=1.24.0` (siehe `setup.py`), damit sowohl die STACKIT REST-APIs als auch optionale S3-Validierungen genutzt werden können.
## Schritt 2: Plugin-Code auf die Appliance kopieren
1. **Verbinden:** Stellen Sie per SSH eine Verbindung zu Ihrer Coriolis Appliance her.
```bash
ssh [ihr_benutzer]@[ip_ihrer_coriolis_appliance]
```
2. **Code kopieren:** Kopieren Sie den gesamten Ordner `coriolis_stackit_plugin` (z.B. mit `scp` oder `rsync`) in ein temporäres Verzeichnis auf der Appliance, z.B. `/tmp/`.
*Beispiel mit `scp` (von Ihrem lokalen Rechner aus):*
```bash
scp -r /pfad/zu/ihrem/coriolis_stackit_plugin [ihr_benutzer]@[ip_ihrer_coriolis_appliance]:/tmp/
```
## Schritt 3: Plugin in Coriolis installieren
1. **In das Verzeichnis wechseln:**
Gehen Sie auf der Appliance in das Verzeichnis, das Sie gerade kopiert haben.
```bash
cd /tmp/coriolis_stackit_plugin
```
2. **Python-Umgebung aktivieren:**
Coriolis verwendet eine eigene virtuelle Python-Umgebung (virtualenv). Der Pfad kann variieren, aber er ist oft unter `/opt/coriolis/` oder `/usr/share/coriolis/`. Sie müssen diese Umgebung aktivieren.
*(Suchen Sie nach `activate` in `/opt/coriolis/` oder `/usr/share/coriolis/`)*
*Beispiel:*
```bash
source /opt/coriolis/coriolis-env/bin/activate
```
*(Ihr Konsolen-Prompt sollte sich jetzt ändern und `(coriolis-env)` anzeigen)*
3. **Plugin installieren:**
Installieren Sie Ihr Plugin mit `pip` im "editable" Modus. Dies ist der wichtigste Befehl.
```bash
pip install -e .
```
*(Das `-e .` bedeutet, dass das Plugin von diesem Verzeichnis aus installiert wird. Pip liest die `setup.py` und führt die Installation durch.)*
4. **Dienste neu starten:**
Damit Coriolis das neu installierte Plugin erkennt, müssen Sie die Coriolis-Dienste neu starten.
```bash
sudo systemctl restart coriolis-api
sudo systemctl restart coriolis-worker
```
*(Die Dienstnamen können leicht variieren, z.B. `coriolis-conductor`)*
## Schritt 4: Konfiguration des Endpoints (in der Coriolis UI)
Nachdem das Plugin installiert und der Dienst neu gestartet wurde, ist Ihr Provider `"stackit_v2"` für Coriolis bekannt.
1. **`.endpoint`-Datei erstellen:**
Erstellen Sie auf Ihrem *lokalen* Rechner eine Datei, z.B. `stackit_v2.endpoint`.
2. **Inhalt einfügen:**
Fügen Sie den folgenden JSON-Inhalt ein und ersetzen Sie die Platzhalter.
Sie finden eine ausführliche Vorlage in `stackit_v2.endpoint`. Die wichtigsten Felder sind:
* `project_id`, `region`, `api_url`, `object_storage_api_url`, `auth_url`
* Object-Storage-Einstellungen (`object_storage_s3_endpoint_url`, `migration_bucket_name`)
* Worker-VM-Parameter (`worker_image_id`, `worker_flavor_id`, `worker_network_id`, `worker_availability_zone`, `worker_security_group_ids`, `worker_keypair_name`)
* Run-Command Zugang (`run_command_api_url`, optional eigenes `run_command_template`, Timeout)
* Optional: `os_morphing_assets` Verweise auf S3-Objekte, die Skripte bzw. Treiber-Pakete für Linux- und Windows-OS-Morphing enthalten (siehe unten).
* Optionale Worker-Metadaten und Steuerflags (`worker_user`, `worker_auto_cleanup`, `worker_boot_volume_size`)
Diese Angaben werden von den Methoden `export_snapshot_to_url()` und `create_volume_from_url()` genutzt, um automatisch Buckets anzulegen, temporäre Access Keys zu erzeugen, Worker-VMs zu starten und anschließend über die STACKIT **Run-Command** API die eigentlichen Datenbefehle (Upload/Download) auf der Worker-VM auszuführen. Stellen Sie sicher, dass Ihr Worker-Image den STACKIT Agent aktiviert hat, damit Run-Command die Shell-Skripte ausführen darf.
> **OS-Morphing:**
> Zusätzlich stehen `prepare_instance_for_os_morphing()` und `inject_drivers()` zur Verfügung. Beide Funktionen erstellen ebenfalls eine Worker-VM, hängen das Ziel-Volume an und führen die Morphing-Schritte direkt auf dem Block-Device aus.
> * Für **Linux** existiert eine eingebaute Standard-Logik (DHCP, Cloud-Init, VirtIO-Module). Optional kann über `os_morphing_assets.linux.script` ein eigenes Skript bereitgestellt werden; dieses wird mit den Umgebungsvariablen `CORIOLIS_DEVICE` und `CORIOLIS_JOB_JSON` auf dem Worker ausgeführt.
> * Für **Windows** wird zwingend ein Skript (z.B. Shell/Python) über `os_morphing_assets.windows.script` erwartet, das die notwendigen Registry-/Treiber-Anpassungen vornimmt (z.B. durch Nutzung von `ntfs-3g`, `chntpw`, `virtio`-Treiberpaketen). Das Skript wird analog mit `CORIOLIS_DEVICE` und `CORIOLIS_JOB_JSON` aufgerufen und kann benötigte Pakete ebenfalls aus S3 laden.
* **WICHTIG:**
Der `"provider"`-Name (`"stackit_v2"`) muss exakt mit dem Namen übereinstimmen, den Sie in der `setup.py` unter `entry_points` definiert haben.
3. **In Coriolis hochladen:**
* Gehen Sie in Ihrer Coriolis Weboberfläche auf "Cloud Endpoints".
* Klicken Sie auf "New Cloud Endpoint".
* Klicken Sie unten auf den "upload"-Link (wie in Ihrem ersten Screenshot).
* Laden Sie Ihre `stackit_v2.endpoint`-Datei hoch.
4. **Validieren:**
Coriolis wird die Datei lesen, Ihren `stackit_v2`-Provider laden und die `authenticate`-Methode aufrufen. Wenn die Anmeldeinformationen korrekt sind, wird der Endpoint als "Valid" gespeichert.
Sie können nun mit dem Testen der `list_...`-Funktionen beginnen.