Usability im Fokus

Terraform 0.12: Grunderneuerung der Konfigurationssprache & der Fehlermeldungen

Dominik Mohilo

© Shutterstock / Dotted Yeti

Bei Infrastructure as Code denken viele vor allem an die drei Platzhirsche Chef, Puppet und Ansible. Wer allerdings auch virtuelle Maschinen provisionieren möchte, setzt eher auf das Open-Source-Tool Terraform. Damit die Arbeit mit dem Werkzeug von Hashicorp einfacher wird, wurde in der aktuellen Version die Konfigurationssprache überarbeitet. Außerdem gibt es jetzt aussagekräftigere Fehlermeldungen.

Mit Terraform, das übrigens in Go geschrieben ist, lassen sich Infrastrukturen in strukturierten Textdateien deklarativ konfigurieren. Somit können diese dann, genau wie Quellcode im Allgemeinen, via Version Control System (VCS) verwaltet werden. Anhand der so erstellten Konfiguration können dann Umgebungen geplant, aufgebaut, verändert und auch wieder abgebaut werden.

Terraform 0.12: Das ist neu

Die strukturierten Textdateien für die Konfiguration werden bei Terraform in einer eigens dafür entwickelten Konfigurationssprache verfasst, welche für die aktuellste Version überarbeitet wurde. Achtung! Die für Terraform 0.12 vorgenommenen Änderungen sind zwar auf eine Rückwärtskompatibilität zu 0.11 ausgelegt, nichtsdestotrotz kann es zu Problemen kommen. Der Upgrade Guide sollte dahingehende Fragen beantworten können.

Ziel der Sprachänderungen in der neuen Version war es, die Konfigurationen für komplexere Konstrukte lesbarer zu machen. Auch eine effektivere und einfachere Nutzung von wiederverwendbaren Modulen soll damit erreicht werden. Gerade im Kontext komplexer Infrastrukturen sollte die neue Ausdruckssyntax behilflich sein. Diese erlaubt es, Ausdrücke (Expressions) direkt dann zu nutzen, wenn ein Wert erwartet wird. Zuvor war es nötig, sämtliche nicht-literalen Ausdrücke als Interpolationssequenzen in Strings einzubauen.

Vorher:

variable "base_network_cidr" {
  default = "10.0.0.0/8"
}

resource "google_compute_network" "example" {
  name                    = "test-network"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "example" {
  count = 4

  name          = "test-subnetwork"
  ip_cidr_range = "${cidrsubnet(var.base_network_cidr, 4, count.index)}"
  region        = "us-central1"
  network       = "${google_compute_network.custom-test.self_link}"
}

Nachher:

variable "base_network_cidr" {
  default = "10.0.0.0/8"
}

resource "google_compute_network" "example" {
  name                    = "test-network"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "example" {
  count = 4

  name          = "test-subnetwork"
  ip_cidr_range = cidrsubnet(var.base_network_cidr, 4, count.index)
  region        = "us-central1"
  network       = google_compute_network.custom-test.self_link
}

Quelle der Beispiele: Hashicorp

Simpler soll die Nutzung von Terraform zudem über das generalisierte Typsystem werden, das in Version 0.12 eingeführt wurde. Objekte und andere Werte sollen sich jetzt viel einfacher zwischen den einzelnen Modulen hin- und herschieben lassen. Das war früher, so die Macher, schwierig, da viele Sprachfeatures nicht gut in Verbindung mit Datenstrukturen wie Listen oder Maps funktionierten.

Ein weiterer Punkt, der die Usability von Terraform deutlich verbessern dürfte, ist die neue Struktur für Fehlernachrichten. Nachdem diese oft nicht wirklich aussagekräftig waren, sollten die Meldungen nun alle (nach Möglichkeit) eine kurze Beschreibung des Problemtyps und eine Referenz zu einem spezifischen und dem Problem entsprechenden Konfigurationskonstrukt enthalten. Auch die Werte jeder Referenz, die im untersuchten Ausdruck vorkommt und eine detailliertere Problembeschreibung sollten enthalten sein, sodass das Ganze am Ende etwa wie folgt aussieht:

Error: Unsupported Attribute

  on example.tf line 12, in resource "aws_security_group" "example":
  12:   description = local.example.foo
    |-----------------
    | local.example is "foo"

This value does not have any attributes.

Weitere Informationen zu den Highlights von Terraform 0.12 gibt es im Blog-Beitrag zum Release, ein vollständiger Changelog ist auf GitHub verfügbar.

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
4000
  Subscribe  
Benachrichtige mich zu: