> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/learn-the-platform/de/modul-8-entwicklung-and-devops/lab.md).

# Labor: Infrastrukturautomatisierung

## Zielsetzung

Automatisieren Sie VergeOS-Infrastrukturvorgänge mithilfe der REST-API, des Terraform-Providers und von Skripting-Tools (pyvergeos oder PowerShell). Am Ende dieses Labs werden Sie VMs und Mandanten programmgesteuert bereitgestellt haben und verstehen, wie VergeOS in CI/CD- und Automatisierungs-Workflows integriert wird.

## Voraussetzungen

* Abgeschlossenes Modul 1: Architekturgrundlagen
* Modul 6 abgeschlossen: Virtuelle Maschinen
* Modul 7 abgeschlossen: Multi-Tenancy
* Lektüre zu Modul 8 abgeschlossen (REST API, Terraform, Python/PowerShell, Cloud-Init)
* Ein laufender VergeOS-Cluster mit aktiviertem API-Zugriff
* Terraform lokal installiert (v1.5+)
* Python 3.9+ oder PowerShell 7+ lokal installiert
* Zugriff auf das [vergeos-terraform-playground](https://github.com/verge-io/vergeos-terraform-playground) Repository

## Schwierigkeitsgrad

**Mittelstufe** -- Setzt Vertrautheit mit REST-APIs, Infrastructure-as-Code-Konzepten und grundlegenden Skriptkenntnissen voraus

## Geschätzte Zeit

**2 Stunden**

## Schritte

### Teil 1: REST-API-Erkundung

Authentifizieren Sie sich bei der VergeOS-API und führen Sie grundlegende Operationen aus.

1. Beschaffen Sie sich einen API-Schlüssel in der VergeOS-Benutzeroberfläche (System > Benutzer > \[Ihr Benutzer] > API-Schlüssel)
2. Verwenden Sie `curl` oder einen REST-Client zur Authentifizierung:

   ```bash
   curl -X GET https://<your-vergeos-host>/api/v4/vms \\
     -H "Authorization: Bearer <your-api-key>"
   ```
3. Listen Sie alle VMs mit dem `/api/v4/vms` Endpunkt auf
4. Erstellen Sie eine neue VM über die API:
   * POST an `/api/v4/vms` mit einem JSON-Body, der Name, CPU, Speicher und Festplatte angibt
5. Starten und stoppen Sie die VM mithilfe der API
6. Löschen Sie die VM über die API
7. Erkunden Sie weitere Endpunkte: Netzwerke (`/api/v4/vnets` — die Tabelle heißt `vnets` während der UI-/Objektname "Networks" lautet), Mandanten (`/api/v4/tenants`)

### Teil 2: Terraform-Provider

Verwenden Sie den VergeOS-Terraform-Provider, um Infrastruktur deklarativ zu verwalten.

1. Klonen Sie das Repository vergeos-terraform-playground:

   ```bash
   git clone https://github.com/verge-io/vergeos-terraform-playground.git
   cd vergeos-terraform-playground
   ```
2. Überprüfen Sie die Provider-Konfiguration in `main.tf`
3. Kopieren und passen Sie ein Beispiel `.tfvars` Datei für Ihre Umgebung an
4. Ausführen `terraform init` um den VergeOS-Provider herunterzuladen
5. Ausführen `terraform plan` um die Infrastrukturänderungen in der Vorschau anzuzeigen
6. Ausführen `terraform apply` um Ressourcen bereitzustellen
7. Überprüfen Sie die erstellten Ressourcen in der VergeOS-Benutzeroberfläche
8. Ändern Sie eine Ressource in der Terraform-Konfiguration und wenden Sie sie erneut an
9. Ausführen `terraform destroy` um aufzuräumen

### Teil 3: Skriptbasierte Automatisierung

Automatisieren Sie einen Workflow mit pyvergeos (Python) oder dem PowerShell-Modul.

1. Installieren Sie pyvergeos:

   ```bash
   pip install pyvergeos
   ```
2. Schreiben Sie ein Skript, das:
   * Sich mit Ihrem VergeOS-Cluster verbindet
   * Alle VMs und ihren aktuellen Status auflistet
   * Eine neue VM aus einem Rezept/einer Vorlage erstellt
   * Wartet, bis die VM läuft
   * Gibt die IP-Adresse und Verbindungsdetails der VM aus
3. Erweitern Sie das Skript, um:
   * Einen Mandanten mit vordefinierten Ressourcenzuweisungen zu erstellen
   * Eine VM innerhalb des Mandanten bereitzustellen
   * Die Mandantentrennung durch Überprüfung der Netzwerkkonnektivität zu verifizieren

### Teil 4: Cloud-Init

Konfigurieren Sie die unbeaufsichtigte Bereitstellung von VMs mit cloud-init.

1. Erstellen Sie eine cloud-init-Konfigurationsdatei mit:
   * Hostname- und Netzwerkeinstellungen
   * Benutzerkonten und SSH-Schlüssel
   * Befehle zur Paketinstallation
   * Skripte nach dem Start
2. Hängen Sie die cloud-init-Konfiguration über die API oder die Benutzeroberfläche an eine neue VM an
3. Starten Sie die VM und überprüfen Sie, ob die cloud-init-Konfiguration angewendet wurde:
   * Überprüfen Sie Hostname- und Netzwerkeinstellungen
   * Überprüfen Sie, ob Benutzerkonten vorhanden sind
   * Bestätigen Sie, dass Pakete installiert wurden

## Verifizierung

Ihr Labor zur Infrastrukturautomatisierung ist abgeschlossen, wenn Sie Folgendes beantworten können **ja** allen folgenden Punkten antworten kannst:

* [ ] Erfolgreich mit der VergeOS-REST-API authentifiziert und CRUD-Operationen an VMs durchgeführt
* [ ] Infrastruktur mithilfe des Terraform-Providers aus dem Playground-Repository bereitgestellt
* [ ] Terraform-Konfiguration geändert und erneut angewendet, wobei inkrementelle Änderungen beobachtet wurden
* [ ] Ein Skript (Python oder PowerShell) erstellt, das die Bereitstellung von VMs und/oder Mandanten automatisiert
* [ ] Eine VM mit cloud-init für die unbeaufsichtigte Einrichtung konfiguriert und überprüft, dass die Konfiguration angewendet wurde
* [ ] Alle Laborressourcen bereinigt (VMs, Mandanten, Terraform-Zustand)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/learn-the-platform/de/modul-8-entwicklung-and-devops/lab.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
