Generierung und Autorisierung von Terraform mit Keycloak auf EO-Lab
Interaktive Nutzung von Horizon bzw. die Eingabe von CLI-Befehlen sind die beiden wichtigsten Methoden zur Nutzung eines OpenStack-Systems. Sie eignen sich gut für die Ausführung einzelner Befehle, lassen sich aber nicht ohne Weiteres skalieren. Ein Tool wie Terraform, von HashiCorp Corporation, bietet eine Alternative zu manuellen Methoden, um kaskadierende Änderungen auszuführen. So könnten Sie zum Beispiel mehrere Instanzen auf einmal erstellen:
Definieren Sie die Parameter für die Erstellung einer Instanz,
speichern Sie diese in einer Terraform-Konfigurationsdatei und
lassen Sie Terraform automatisch die vorgeschriebene Anzahl von Wiederholungen durchführen.
Der Plan ist, Terraform zu installieren, den OpenStack-Token zu erhalten, ihn in die Konfigurationsdatei einzugeben und auszuführen. Dann können Sie Terraform effektiv in der EO-Lab Cloud nutzen. Mit Terraform können Sie zum Beispiel
eine Vielzahl von virtuellen Maschinen automatisiert erstellen, jede mit eigenen Floating IPs, DNS und Netzwerkfunktionen oder
die Erstellung von Kubernetes-Clustern automatisieren.
Was wir tun werden
Terraform als Root-Benutzer installieren
Verbindung zur Cloud wiederherstellen
OpenStack Token herunterladen
Einrichten der Konfigurationsdatei und Initialisierung von Terraform
Terraform-Code erstellen
Bedeutung der verwendeten Variablen erläutern
Ausführen des Terraform-Skripts
Voraussetzungen
No. 1 Konto
Sie benötigen ein EO-Lab Konto mit Zugriff auf die Horizon-Schnittstelle: https://cloud.fra1-1.cloudferro.com/auth/login/?next=/. Sie benötigen insbesondere das Passwort für das Konto, das Sie im Voraus festlegen sollten.
Nr. 2 Installierte Version von Linux
Sie können Ihre aktuelle Linux-Installation verwenden, aber in diesem Artikel beginnen wir mit einer neuen Version. Erstellen Sie eine neue VM mit Ubuntu wie in diesem Artikel beschrieben:
Wie man eine Linux-VM erstellt und von einer Linux-Kommandozeile auf EO-Lab zugreift.
Nr. 3 Installierter OpenStackClient für Linux
Um einen Token aus der Cloud zu erhalten, müssen Sie zunächst den Zugriff von der gerade erstellten Ubuntu-VM aus aktivieren:
Wie installiert man den OpenStackClient (Linux)?
Es wird Ihnen gezeigt, wie Sie Python installieren, eine virtuelle Umgebung erstellen und aktivieren und sich dann mit der Cloud verbinden, indem Sie die richtige RC-Datei von der EO-Lab Cloud herunterladen und aktivieren.
Nr. 4 Verbindung zur Cloud über eine RC-Datei
Der Artikel, So aktivieren Sie den OpenStack CLI-Zugriff in der EO-Lab Cloud, befasst sich mit der Verbindung zur Cloud und deckt Ein- oder Zwei-Faktor-Authentifizierungsverfahren ab. Behandelt werden alle wichtigen Plattformen: Linux, MacOS und Windows.
Sie werden sowohl die virtuelle Python-Umgebung als auch die heruntergeladene RC-Datei verwenden, nachdem Terraform installiert wurde.
Schritt 1 Installieren Sie Terraform als root-Benutzer
Installieren Sie die benötigten Abhängigkeiten mit dem folgenden Befehl:
sudo apt-get install wget curl unzip software-properties-common gnupg2 -y
Laden Sie die von HashiCorp signierten gpg-Schlüssel herunter und fügen Sie sie zu Ihrem System hinzu. Um diese Aktion durchzuführen, wechseln Sie zunächst in den root-Modus:
sudo su # Enter root mode
curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add -
Fügen Sie das HashiCorp-Repository zur APT hinzu:
sudo apt-add-repository "deb [arch=$(dpkg --print-architecture)] https://apt.releases.hashicorp.com $(lsb_release -cs) main"

Die folgenden Befehle aktualisieren Ubuntu, installieren Terraform und überprüfen dessen Version:
apt-get update -y #update Ubuntu
apt-get install terraform -y # install Terraform
terraform -v # check the version
Verlassen Sie nun den Root-Modus und werden wieder zum Standard eouser.
su eouser # Exit root mode
Schritt 2 Erneutes Verbinden mit der Cloud
Wenn Sie die Voraussetzungen Nr. 2 und 3 erfüllt haben, waren Sie mit der Cloud verbunden. Diese Verbindung ist nun verloren gegangen, da Sie zum Root-Benutzer und wieder zurück zum normalen eouser für die EO-Lab Cloud gewechselt haben. Lesen Sie Voraussetzung Nr. 4 Aktivieren Sie die RC-Datei, um sich wieder mit der Cloud zu verbinden. Der folgende Befehl dient als Test:
openstack flavor list
und sollte den Anfang einer Liste der im System verfügbaren Geschmacksrichtungen darstellen:

Sie sind nun bereit, einen Token von der Cloud zu erhalten, mit der Sie arbeiten. Der „Token“ ist eine lange Zeichenfolge, die als eine Art Passwort für Ihren Code dient.
Schritt 3 OpenStack-Token herunterladen
Holen Sie sich den Token mit dem folgenden Befehl:
openstack token issue -f shell -c id
Das ist das Ergebnis:
id="gAAAAABj1VTWP_CFhfKv4zWVH7avFUnHYf5J4TvuKG_Md1EdSpBIBZqTVErqVNWCnO-kYq9D7fi33aRCABadsp23-e-lrDFwyZGkfv-d83UkOTsoIuWogupmwx-3gr4wPcsikBvkAMMBD0-XMIkUONAPst6C35QnztSzZmVSeuXOJ33DaGr6yWbY-tNAOpNsk0C9c13U6ROI"
Der Wert der Variable id ist der Token, den Sie benötigen. Kopieren und speichern Sie ihn, damit Sie ihn in die Konfigurationsdatei für Terraform eingeben können.
Schritt 4 Richten Sie die Konfigurationsdatei ein und initialisieren Sie Terraform
Erstellen Sie ein neues Verzeichnis, in dem Ihre Terraform-Dateien gespeichert werden, und wechseln Sie dorthin:
mkdir terraform-dir # Name it as you want
cd terraform-dir
Erstellen Sie eine Konfigurationsdatei, yourconffile.tf, und öffnen Sie sie in einem Texteditor. Hier verwenden wir nano:
sudo nano yourconffile.tf # Name it as you want
Fügen Sie den folgenden Text in die Datei ein:
# Configure the OpenStack Provider
terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
}
}
}
Speichern Sie die Datei (bei Nano mit Strg-X und Y).
Diese Befehle informieren Terraform darüber, dass es mit OpenStack arbeitet.
Verwenden Sie den folgenden Befehl, um Terraform zu initialisieren:
terraform init
Terraform wird die Datei yourconffile.tf aus dem aktuellen Ordner lesen. Der tatsächliche Name spielt keine Rolle, solange es die einzige .tf Datei in diesem Ordner ist.
Sie können natürlich auch viele andere .tf-Dateien verwenden, wie z.B.
main.tf für das Hauptprogramm von Terraform,
variable.tf, um Variablen zu definieren
und so weiter.
Der Bildschirm nach der Initialisierung sieht dann wie folgt aus:

Terraform wurde initialisiert und funktioniert ordnungsgemäß mit Ihrer OpenStack-Cloud. Fügen Sie nun Code hinzu, um einige nützliche Aufgaben auszuführen.
Schritt 5 Terraform-Code erstellen
Fügen Sie den Code an den Inhalt der Datei yourconffile.tf an. Er erzeugt vier virtuelle Maschinen, wie im Wert der Variablen count angegeben. Die gesamte Datei yourconffile.tf sollte nun wie folgt aussehen:
# Configure the OpenStack Provider
terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
}
}
}
provider "openstack" {
user_name = "[email protected]"
tenant_name = "cloud_00aaa_1"
auth_url = "https://keystone.cloudferro.com:5000/v3"
domain_name = "cloud_00aaa_1"
token = "gAAAAABj1VTWP_CFhfKv4zWVH7avFUnHYf5J4TvuKG_Md1EdSpBIBZqTVErqVNWCnO-kYq9D7fi33aRCABadsp23-e-lrDFwyZGkfv-d83UkOTsoIuWogupmwx-3gr4wPcsikBvkAMMBD0-XMIkUONAPst6C35QnztSzZmVSeuXOJ33DaGr6yWbY-tNAOpNsk0C9c13U6ROI"
}
resource "openstack_compute_instance_v2" "test-terra" {
count = 4
name = "test-instance-${count.index}"
image_id = "d7ba6aa0-d5d8-41ed-b29b-3f5336d87340"
flavor_id = "eo2.medium"
security_groups = [
"default", "allow_ping_ssh_icmp_rdp" ]
network {
name = "eodata_00aaa_3"
}
network {
name = "cloud_00aaa_3"
}
}
Verwenden Sie immer den neuesten Wert der Image id
Von Zeit zu Zeit werden die Standard-Images der Betriebssysteme in der EO-Lab Cloud auf neue Versionen aktualisiert. Infolgedessen ändert sich ihre Image-ID. Nehmen wir an, dass die Image-ID für Ubuntu 20.04 LTS zum Zeitpunkt der Erstellung dieses Artikels 574fe1db-8099-4db4-a543-9e89526d20ae war. Während Sie den Artikel durcharbeiten, würden Sie normalerweise den aktuellen Wert von image id nehmen und ihn verwenden, um 574fe1db-8099-4db4-a543-9e89526d20ae im Text zu ersetzen.
Nehmen wir nun an, Sie wollten Prozesse unter OpenStack automatisieren, vielleicht mit Heat, Terraform, Ansible oder einem anderen Tool für die OpenStack-Automatisierung; wenn Sie den Wert 574fe1db-8099-4db4-a543-9e89526d20ae für image id verwenden, bliebe er hardcodiert und sobald dieser Wert während des Upgrades geändert wird, könnte der automatisierte Prozess nicht mehr ausgeführt werden.
Warnung
Vergewissern Sie sich, dass Ihr Automatisierungscode den aktuellen Wert einer OS-Image-ID verwendet und nicht einen fest codierten.
Die Bedeutung der verwendeten Variablen
Die Bedeutung der verwendeten Variablen ist wie folgt:
- user_name
Benutzername, mit dem Sie sich in das Konto EO-Lab einloggen. Sie können hier auch Ihre E-Mail-Adresse verwenden.
- tenant_name
Beginnt mit cloud_00. Sie können es in der oberen linken Ecke des Horizon-Fensters sehen.
- domain_name
Wenn Sie nur ein Projekt in der Domäne haben, ist dies identisch mit dem tenant_name von oben.
- token
Der id-Wert, den Sie vom Befehl openstack token issue erhalten haben.
- count
Wie oft der Vorgang wiederholt werden soll (in diesem Fall sollen vier neue virtuelle Maschinen erstellt werden)
- name
Der Name jeder VM; hier wird er durch Hinzufügen einer Ordnungszahl am Ende des Namens unterschieden, z. B. test-instance-1, test-instance-0, test-instance-2, test-instance-3.
- image_id
Der Name oder ID-Code für ein Betriebssystem-Image, den Sie mit dem Befehl Compute -> Images erhalten. Wenn Sie zum Beispiel das Image Ubuntu 20.04 LTS auswählen, lautet seine ID d7ba6aa0-d5d8-41ed-b29b-3f5336d87340.
- flavor_id
Name des Flavors, den jedes M haben wird. Sie erhalten diese Namen aus dem Befehl openstack flavor list.
- security_groups
Hier handelt es sich um ein Array mit zwei Sicherheitsgruppen - default und allow_ping_ssh_icmp_rdp. Dies sind die grundlegenden Sicherheitsgruppen, die zu Beginn für alle VMs verwendet werden sollten.
- network
Name des zu verwendenden Netzes. In diesem Fall geben wir das Netz eodata_00aaa_3 für eodata und cloud_00aaa_3 für die allgemeine Kommunikation innerhalb der Cloud an.
Schritt 6 Führen Sie das Terraform-Skript aus
So wird Terraform vier Instanzen von Ubuntu 20.04 LTS erstellen. Mit dem Befehl apply wird das Skript ausgeführt. Wenn Sie nach einer Bestätigung gefragt werden, geben Sie yes ein, um den Vorgang zu starten:
terraform apply

Bestätigen Sie
yes
Es werden vier VMs erstellt, die durch die Variable count definiert sind.
Sie sollten eine ähnliche Ausgabe wie die folgende erhalten:

So würden Sie diese virtuellen Maschinen in Horizon sehen:

Wenn Sie die Aktionen rückgängig machen und die gerade erstellten VMs löschen möchten, lautet der Befehl wie folgt:
terraform destroy
Geben Sie erneut yes ein, um den Vorgang zu starten.
Was als nächstes zu tun ist
Von besonderem Interesse sind die folgenden CLI-Befehle für Terraform:
- plan
Zeigt an, welche Änderungen Terraform durchführen wird, damit Sie diese genehmigen können.
- validate
Überprüft, ob die Konfiguration gültig ist.
- show
Zeigt den aktuellen Zustand oder einen gespeicherten Plan an.
Verwenden Sie
terraform -help
um andere Befehle anzuzeigen, die Terraform anbietet.
Der Artikel Wie erstellt man einen Satz von VMs mit OpenStack Heat ( Orchestration)? nutzt die Orchestrierungsfunktionen von OpenStack, um die Erstellung von virtuellen Maschinen zu automatisieren. Es ist ein anderer Ansatz als Terraform, aber beide können zur Automatisierung unter OpenStack genutzt werden.