Читать книгу Handbuch Infrastructure as Code - Kief Morris - Страница 63
Listing 4-1: Beispiel für prozeduralen Code, der einen Server erstellt
Оглавлениеimport 'cloud-api-library'
network_segment = CloudApi.find_network_segment('private')
app_server = CloudApi.find_server('my_application_server')
if(app_server == null) {
app_server = CloudApi.create_server(
name: 'my_application_server',
image: 'base_linux',
cpu: 2,
ram: '2GB',
network: network_segment
)
while(app_server.ready == false) {
wait 5
}
if(app_server.ok != true) {
throw ServerFailedError
}
app_server.provision(
provisioner: servermaker,
role: tomcat_server
)
}
Dieses Skript vermischt das, was zu erstellen ist, mit dem, wie es zu erstellen ist. Es legt Attribute des Servers fest, unter anderem die CPU- und Speicherressourcen, die provisioniert werden sollen, das Betriebssystem-Image, von dem gestartet wird, und welche Rolle angewendet werden soll. Es implementiert auch Logik und prüft, ob der Server namens my_application_server schon existiert, um zu verhindern, dass ein Server doppelt angelegt wird. Dann wartet es, bis der Server bereit ist, um die Konfiguration darauf anzuwenden.
Dieser Beispielcode kümmert sich nicht um Änderungen an den Serverattributen. Was passiert, wenn Sie den Speicher erhöhen müssen? Sie könnten das Skript anpassen und bei bestehendem Server jedes Attribut prüfen und bei Bedarf aktualisieren. Oder Sie könnten ein neues Skript schreiben, um bestehende Server zu finden und anzupassen.
Realistischere Szenarien sind solche, bei denen mehrere Server mit unterschiedlichem Typ im Spiel sind. Neben unserem Anwendungsserver hatte mein Team Webserver und Datenbankserver im Einsatz. Auch gab es mehrere Umgebungen, was zu mehreren Instanzen jedes Servers führte.
Teams, mit denen ich zusammengearbeitet habe, verwandelten solche einfachen Skripte wie das obige Beispielskript oft in ein Skript für viele verschiedene Zwecke. Das übernahm dann Argumente, mit denen der Typ des Servers und die Umgebung spezifiziert wurde und die dann dazu dienten, die passende Serverinstanz anzulegen. Das haben wir zu einem Skript umgebaut, das Konfigurationsdateien einliest, in denen die verschiedenen Serverattribute definiert sind.
Ich arbeitete gerade an einem solchen Skript und fragte mich, ob es sich lohnen würde, es als Open-Source-Tool bereitzustellen, als HashiCorp die erste Version von Terraform veröffentlichte.