Generierung und Autorisierung von Terraform mit Keycloak auf CODE-DE

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 CODE-DE 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 CODE-DE 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 CODE-DE 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 CODE-DE Cloud herunterladen und aktivieren.

Nr. 4 Verbindung zur Cloud über eine RC-Datei

Der Artikel, So aktivieren Sie den OpenStack CLI-Zugriff in der CODE-DE 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"
../_images/terraform_adding_repository.png

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 CODE-DE 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:

../_images/terraform_flavor_list_short.png

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:

../_images/terraform_init.png

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 CODE-DE 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 CODE-DE 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
../_images/terraform_yes.png

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:

../_images/terraform_apply.png

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

../_images/terraform_horizon.png

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.