Chef-Cookbooks im Einsatz AWS OpsWorks for Chef Automate, Teil 3

Config-Management mit AWS-Tools

Um mit Chef richtig zu arbeiten, müssen wir ein Cookbook mit zugehörigen Rezepten erstellen. In diesem Anwendungsbeispiel werden wir auf einem Linux-Server zur Laufzeit exemplarisch eine neue Webanwendung mit Hilfe eines Chef-Rezepts bootstrappen.

Für unser Beispiel, das das Aufsetzen von Chef Automate Server und Chef Workstation in der AWS Cloud voraussetzt, ist es zunächst erforderlich, ein einfaches Cookbook zu erstellen. „Kochbücher“ sind unter Chef das grundlegende Einheit zur Konfiguration und Verteilung von Richtlinien mit Chef. Ein Cookbook definiert ein Szenario – oder einen Konfigurationsstatus – und enthält alles, was zur Unterstützung dieses Szenarios erforderlich ist.

Hierzu zählen in erster Linie die einzelnen Chef-Rezepte, aber auch weitere Vorlagen- und Konfigurationsdateien.

Technisch betrachtet gleicht das Cookbook einem Ordner mit einer vorgegeben Struktur, die etwa so aussieht.

cookbooks (Ordner)
|— mycookbook (Ordner)
     |— metadata.rb (Datei)
     |— recipes (Ordner)
          |— default.rb (Datei)
     |— templates (Ordner) 
          |— index.html.erb(Datei)
     |— attributes (Ordner)
          |— default.rb (Datei)

Cookbooks müssen in einem Online-Repository gespeichert sein, wahlweise im ZIP-Format oder (besser) in einem S3-Bucket oder einem Quellcode-Repo, in welchen sich Cookbooks auch versionieren lassen. Unterhalb des Ordners mit dem Cookbook-Namen gibt es eine Unterordner-Struktur, die zumindest Dateien der drei Komponenten „Attributes“, „Templates“ und „Recipes“ enthält.
  • Die Recipe-Dateien stellen dabei namensgetreu die eigentlichen Rezepte dar. Sie sind in Prinzip Ruby-Anwendungen, die alles definieren, was zum Konfigurieren eines Systems erforderlich ist. Dies umfasst das Erstellen und Konfigurieren von Ordnern, die Installation und Konfiguration von Paketen sowie das Starten von Diensten.
  • Attribute Files enthalten eine Reihe von Attributen, die Werte darstellen, die von den Rezepten und Vorlagen verwendet werden können. Attribute-Dateien tragen wie Rezepte die Endung „.rb“.
  • Template Files stellen wiederum Rezepte zum Erstellen „anderer“ Dateien dar, z. B. von Konfigurationsdateien. Templates helfen beim Modifizieren von Konfigurationsdateien durch das Überschreiben von Attributen, ohne dass dazu das Cookbook selbst angefasst werden oder eine neue Konfigurationsdatei geschrieben werden muss. Möchte man eine Konfigurationsdatei in einer Instanz auch nur geringfügig ändern, gelingt das am besten mit Hilfe einer Vorlagendatei. Templates tragen die Endung „.erb“

Folgendes Beispiel für ein Rezept dient der Installation von Apache auf einem beliebigen Linux-Node und muss innerhalb des Cookbooks im Subfolder „recipes“ mit einem Dateinamen gespeichert werden, der auf .rb enden.

package ‚apache2‘ do
   case node[:platform]
   when ‚centos‘,’redhat‘,’fedora‘,’amazon‘
      package_name ‚httpd‘
   when ‚debian‘,’ubuntu‘
      package_name ‚apache2‘
   end
   action :install
end

Das Starter-Kit stellt bereits einen Cookbook-Folder zur Verfügung. Hierzu navigiert man auf seiner Chef-Workstation zu ~/[Name-des-Starter-Kit-Verzeichnis]/cookbooks. Das Erstellen eines neuen Cookbooks namens „simple-webapp“ mit passenden (leeren) Skeletons für Attributes, Templates und Recipes erfolgt dann z. B. durch Eingeben von:

chef generate cookbook simple-webapp

Die Ausgabe sollte so aussehen:

enerating cookbook simple-webapp
– Ensuring correct cookbook file content
– Ensuring delivery configuration 
– Ensuring correct delivery build cookbook content
Your cookbook is ready. Type cd Simple-webapp to enter

Danach führt man im Verzeichnis des neuen Cookbooks – hier „simple-webapp“ – folgendes Kommando aus, um eine Template-Datei namens „index.html.erb“ zu generieren.

chef generate template index.html.erb

Die Template-Datei muss nun mit Hilfe eines Editors mit Inhalt gefüllt werden, etwa so:

Hier weiterlesen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.