Tags: Configuration-Management, Web-Server
Kochbücher bilden in Chef die grundlegende Einheit zur Konfiguration von Richtlinien. Jedes davon definiert ein Szenario oder einen Konfigurationsstatus. Im folgenden Beispiel möchte ich eine Web-Anwendung mit Hilfe eines Chef-Rezepts bootstrappen. Dazu erstelle ich auf der Workstation ein einfaches Cookbook.
Ein Kochbuch besteht aus mehreren Komponenten, und zwar in erster Linie den einzelnen Chef-Rezepten, aber auch Vorlagen- und Konfigurationsdateien. Technisch gesehen ist ein Cookbook aber nur eine vorgegebene Ordnerstruktur, die so aussieht:
Die Cookbooks selbst werden vom Chef-Server in einem Online-Repository bereitgehalten und verwaltet, etwa im ZIP-Format oder besser als Quellcode-Repository, in dem sich die Cookbooks auch versionieren lassen. Wer Chef in AWS betreibt, verwendet ein versioniertes S3-Bucket oder AWS CodeCommit.
Unterhalb des Ordners mit dem Namen des Cookbooks erscheint nach dem Generieren des Skeletons eine Verzeichnisstruktur aus den drei Komponenten Attribute-Files, Template-Files und Recipe-Files.
Rezepte, Attribute, Vorlagen
Hier sind Recipe files die eigentlichen Rezepte. Dabei handelt es sich um pure Ruby-Anwendungen, die alles definieren, was zum Konfigurieren eines Systems erforderlich ist. Dazu zählt das Erstellen und Konfigurieren von Ordnern, Installieren und Anpassen von Paketen und das Starten von Diensten.
Die Attribute files enthalten Werte, die von den Rezepten und Vorlagen verwendet werden können. Attribute-Dateien haben wie Rezepte die Endung .rb.
Template-Files sind Vorlagen, die Rezepte zum Erstellen anderer Dateien darstellen, zum Beispiel von Konfigurationsdateien. Sie modifizieren diese durch das Überschreiben von Attributen, ohne dass dazu das Cookbook selbst angefasst werden oder eine neue Konfigurationsdatei geschrieben werden muss. Templates tragen die Endung .erb.
Apache HTTP-Server installieren
Das folgende Beispiel definiert ein Rezept zum Installieren des Apache-Webservers und muss innerhalb des Cookbooks im Subfolder recipes mit einem Dateinamen gespeichert werden, der auf .rb endet.
Fertige Rezepte, etwa zum Bereitstellen und Konfigurieren eines IIS unter Windows Server 2016 finden sich im Chef Supermarket. Dazu später mehr.
Struktur mit dem Starter-Kit erzeugen
Für den Anfang und das weitere Verständnis genügt es, sich zunächst mit dem Starter-Kit vertraut zu machen. Dieses stellt bereits einen Cookbook-Folder unter
~/[Name-des-Starter-Kit-Verzeichnis]/cookbooks
zur Verfügung. Das Erstellen eines neuen Kochbuchs namens simple-webapp mit passenden (leeren) Skeletons für Attribute, Templates und Recipes erfolgt dann durch Eingeben von
chef generate cookbook simple-webapp
Die Ausgabe sollte so aussehen:
Danach wechselt man ins Unterverzeichnis des neuen Cookbooks simple-webapp und führt dort folgendes Kommando aus, um eine Template-Datei namens index.html.erb zu generieren.
chef generate template index.html.erb
Diese Template-Datei muss nun mit Hilfe eines Editors mit Inhalt gefüllt werden, etwa so:
Danach generieren wir mit dem folgenden Befehl auch noch eine passende Attributdatei mit dem Namen default:
chef generate attribute default.rb
Diese befüllen wir dann so:
default ['simple-webapp'] ['appname'] = 'Simple WebApp'
default ['simple-webapp'] ['meinname'] = 'Thomas Drilling'
default['simple-webapp']['bgcolor'] = ' DF7401 '
Jetzt ist es an der Zeit, das noch leere Standardrezept anzupassen, wozu wir die Datei recipes /default.rb mit einem Editor unserer Wahl bearbeiten. Hier hinein kommt jetzt der Code in Ruby-Syntax, um die Web-Server-Bereitstellung mit zugehöriger /var/www/html/index.html aus der obigen Vorlage zu erzeugen:
Chef Supermarket
Anschließend erweitern wir unser Kochbuch, um es als Standard-Cookbook für den chef-client zu verpacken. Ein gängiger Workflow dazu ist das Schreiben eines sogenannten Wrapper-Cookbooks.
Hierbei handelt es sich um ein Standard-Kochbuch, das von anderen Cookbooks und Rezepten abhängt bzw. darauf verweist. Auf diese Weise lassen sich vorhandene Rezepte aus dem Chef-Supermarket für den chef-client oder den IIS einfach zugänglich machen.
Ansatzpunkt dazu ist das Bearbeiten der Datei metadata.rb im Hauptverzeichnis des jeweiligen Cookbooks. Dieses ergänzen wir um die Zeile
depends 'chef-client'
Danach ändern wir noch das Standardabfrageintervall für den Chef-Client von 30 auf 5 Minuten, wozu wir die attributes.rb-Datei um folgende Zeile ergänzen:
default['chef-client']['interval'] = '300'
default['chef-client']['splay'] = '0'
Dabei ist splay ist eine Funktion, die dem Abfrageintervall eine zufällige Anzahl von Sekunden (standardmäßig zwischen 1 und 300) hinzufügt. Das Reduzieren auf null stellt sicher, dass der Chef-Client alle fünf Minuten auf Änderungen abfragt.
Jetzt müssen wir nur noch unserer Standardrezept für simple-webapp um den Eintrag
include_recipe 'chef-client::default'
erweitern, um den Chef-Client beim Bootstrapping von simple-webapp gleich mit zu installieren.
Täglich Know-how für IT-Pros mit unserem Newsletter
Thomas Drilling arbeitet ist seit fast 30 Jahren selbständig in der IT-Welt sowohl als Consultant, als auch als Redakteur, Buchautor und Journalist für viele ehemalige und aktuelle IT-Magazine sowie Blogs.
Aktuell bestätigt sich Thomas schwerpunktmäßig als IT-Trainer für Cloud-Computing in den Bereichen Microsoft Azure, Amazon Web Services und VMware.
Thomas ist zertifizierter Microsoft-Trainer für nahe das gesamte Portfolio an Microsoft Azure Trainings. Thomas ist außerdem zertifizierter Microsoft Azure Solutions Architect Expert sowie VMware Certified Professional und wurde von VMware in den Jahren 2016 bis 2022 mit dem Blogger-Status vExpert ausgezeichnet.
Thomas führt aktuell jeden Monat zwei selbstkonziperte 4-tägigen Grundlagenkurse in Cloud Computing mit Azure durch, die sich inhaltlich bewusst von den Microsft-Kursen abheben und vorzuweise als Bootcamp in eine besonderen Lokation stattfinden. Optional kann aber aber auch remote via Microsoft Teams teilgenommen werden.
Das aktuelle Trainingsprogramm findet sich unter Azure-Trainings. Weitere Informationen und Anmeldung über sein Azure-Blog.
Verwandte Beiträge
- Internet Information Services (IIS) über Chef konfigurieren
- Sicherheitseinstellungen für Windows Server mit Ansible konfigurieren
- Sicherheitseinstellungen für Windows verwalten: Ansible und Gruppenrichtlinien im Vergleich
- IT-Ressourcen automatisch mit Terraform konfigurieren
- Exchange 2019 CU14 aktiviert Extended Protection, HSTS-Support für 2016 und 2019 ab sofort
Weitere Links