diff --git a/README.md b/README.md index bdc7479..a7fbd0a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,66 @@ # Installation von VMs bei Hetzner +## Grundlagen + +Mit Opentofu wurde von Terraform geforkt, als das Terraform die Lizenz änderte +und Terraform damit vom OpenSource-Gedanken etwas abrückte. + +Das Grundkonzept besteht darin, dass in über die Konfigurationssprache "hcl" +die Infrastruktur beschrieben wird, die man einrichten möchte. + +Die Infrastruktur-Beschreibungen werden in eine oder mehrere Dateien mit der +Dateiendung '.tf' gespeichert. + +In den Dateien werden die Resourcen beschrieben. Hier einmal ein Beispiel +für die Resource, die einen ssh-Publickey enthält: + +```hcl +resource "hcloud_ssh_key" "default" { + name = "treff-key" + public_key = file("~/.ssh/id_ed25519.pub") +} +``` + +"resource" leitet dabei einen Block für eine einzelne Resource ein. + +"hcloud_ssh_key" ist der Resource-Typ. In diesem Fall ein ssh-Key für die +Hetzner-Cloud. Nach dem Resource-Typ richtet sich, welche eigenenschaften diese +Resource haben kann. + +"default" ist der Tofu name für diese Resource. Diese muss pro Resource-Typ +eindeutig sein. + +An anderer Stelle kann auf diese Resource verwiesen werden, wenn man in der +Form "hcloud_ssh_key.default.public_key" darauf verweis. + +Als Attribut "name" wird der Name konfiguriert, über den diese Key in der +Hetzner Cloud-Konsole angezeigt wird. +"public_key" enthält den öffentlichen Teil des ssh-Schlüssels. + +Mit "file(...)" wird in diesem Beispiel der Inhalt einer lokalen Datei +eingelesen. + +Außer "resource" gibt es noch weitere Objekt in den Tofu-Dateien. +Mit "variable" wird eine Variable definiert. Mit "output" kann man am Ende +einer Ausführung bestimmte Variablen ausgeben lassen. + +Der große Unterschied zu anderen Ansätzen wie z.B. Ansible ist, dass Tofu +den Status der angelegten Resourcen speichert. + +Bei der ersten Anwendung wird eine Datei `terraform.tfstate` angelegt, die alle +notwendigen Status-Informationen enthält. + +Bei einer Hetzner-VM steht dort z.B. die eindeutige ID der VM, die die +Hetzner-API beim Anlegen zurückgegeben hat, in der Datei. + +Durch diese Speicherung der Statusinformationen ist Terraform später in der +Lage, einen Abgleich zwischen aktuell laufender und in den Dateien beschriebenen +Resourcen zu erstellen. + +Wurde eine VM beispielsweise in den Dateien mit mehr RAM ausgesattet, kann +Tofu dies erkennen und passt dann bei der nächsten Anwendung der RAM der laufenden +VM an. + ## Hetzner Zugang Die Hetzner-Cloud ist in Projekte unterteilt. Jedes Projekt kann von einen oder @@ -20,9 +81,20 @@ mit angegeben wird. Die Datei hat folgenden Inhalt: hcloud_token="SuperSecretToken" ``` +In den Projekten können auch ssh-Keys hinterlegt werden. Diese werden bei der +Erstellung einer VM mit angegeben und dann automatisch beim root-User in der +erzeugten VM hinterlegt. + +Zu Vereinfachung liest diese Automatisierung die Datei `~/.ssh/id_ed25519.pub` +ein und hinterlegt den Public-Key automatisch in dem Hetzner-Projekt. + ## Initalisierung -Dies lädt den notwendigen Hetzner-Provider herunter, wenn er noch nicht existiert +Die Initalisierung lädt die notwendigen Provider herunter, die tofu benötigt, +um die Automatisierungen auszuführen. Provider sind dabei Plugins für tofu, +die einen bestimmten Funktionsumfang abbilden. In diesem Fall wird der Provider +für die Hetzner-Cloud nachgeladen, der die APIs von Hetzner kennt und diese +anspricht. ``` tofu init