Читать книгу Handbuch Infrastructure as Code - Kief Morris - Страница 68

Listing 4-3: Beispiel für Infrastruktur-Code in einer imperativen Sprache

Оглавление

this_country = getArgument("country")

data_centers = CloudApi.find_data_centers(country: this_country)

full_ip_range = 10.2.0.0/16

vlan_number = 0

for $DATA_CENTER in data_centers {

vlan = CloudApi.vlan.apply(

name: "public_vlan_${DATA_CENTER.name}"

data_center: $DATA_CENTER.id

ip_range: Networking.subrange(

full_ip_range,

data_centers.howmany,

data_centers.howmany++

)

)

}

Der Code weist zudem jedem VLAN einen IP-Bereich zu, wobei er eine fiktive, aber sehr nützliche Methode namens Networking.subrange() verwendet. Diese Methode übernimmt den in full_ip_range deklarierten Adressbereich, teilt ihn basierend auf dem Wert von data_centers.howmany in eine Reihe kleinerer Adressbereiche auf und gibt einen dieser Adressbereiche zurück (der über die Variable data_centers.howmany indexiert ist).

Solche Logik lässt sich nicht durch deklarativen Code ausdrücken, daher erweitern die meisten deklarativen Infrastruktur-Tools ihre Sprachen um imperative Programmiermöglichkeiten. So ergänzt Ansible beispielsweise sein YAML um Schleifen und Bedingungen (https://oreil.ly/-4wWs). Die Konfigurationssprache HCL von Terraform wird oft als deklarativ beschrieben, aber eigentlich kombiniert sie drei Untersprachen (https://oreil.ly/dFgG4). Eine davon ist Expressions (https://oreil.ly/qJQrd), die Bedingungen und Schleifen enthält.

Neuere Tools, wie zum Beispiel Pulumi (https://www.pulumi.com) oder das AWS CDK (https://aws.amazon.com/cdk), wenden sich wieder programmierbaren Sprachen für die Infrastruktur zu. Ein großer Vorteil ist die Unterstützung von allgemein nutzbaren Programmiersprachen (siehe »Allgemein nutzbare Sprachen und DSLs für die Infrastruktur« auf Seite 76). Aber sie sind auch nützlich, um dynamischeren Infrastruktur-Code zu implementieren.

Statt also entweder deklarative oder imperative Infrastruktur-Sprachen als das einzig korrekte Paradigma anzusehen, sollten wir uns anschauen, für welche Aspekte die jeweilige Sprache am besten passt.

Handbuch Infrastructure as Code

Подняться наверх