Puppet auf Windows in der Geschmacksrichtung Chocolatey

Puppet ist ein Open Source Tool für Configuration Management. Dieses erfreut sich sowohl im Linux als auch im Unixoiden Umfeld hoher Popularität. Was viele nicht wissen: Puppet kann auch mit Windows.

Puppet verfügt nämlich über zur Windows-Verwendung geeignete integrierte Resource-Typen wie User, File, Exec und Package.

Zur Installation von Paketen wie zum Beispiel im MSI oder Exe Format verwendet man folgenden Code:

package { 'mysql':
  ensure          => '5.5.16',
  source          => 'N:\packages\mysql-5.5.16-winx64.msi', 
  install_options => ['INSTALLDIR=C:\mysql-5.5'],
}

Windows verfolgt allerdings einen komplett anderen administrativen Ansatz als Linux. Den kleinsten Unterschied macht dabei noch die verschiedene Slash/Backslash Schreibweise aus. Deutlicher wird dieser, wenn man sich die Herangehensweise bei der Software Konfiguration ansieht: Unter Windows wird diese eher selten mit Konfigurationsdateien umgesetzt, sondern meist über die Registry. Hier hilft der Resource-Typ File nicht wirklich weiter.

Fällt nun eine neue Aufgabe an, die es mit Puppet zu lösen gilt, sucht man zunächst am besten in der Puppet Forge. Häufig standen schon andere vor der selben Herausforderung und haben die Lösung bereits dort dokumentiert. Sucht man nun in der Forge nach „Windows“ stößt man auf die „Windows module collection“ von Puppetlabs. Die Sammlung enthält:

– puppetlabs/acl – Setzen von ALCs auf dem Dateisystem

– puppetlabs/dsc – Verwaltung von Windows PowerShell DSC (Desired State Configuration)

– puppetlabs/iis – Verwaltung des IIS Webservers

– puppetlabs/powershell – Ausführen von Powershell Kommandos

– puppetlabs/reboot – Durchführen von Neustarts

– puppetlabs/registry – Setzen oder löschen von Registry Schlüsseln

– puppetlabs/wsus_client – Setzen der WSUS client Konfiguration

– puppet/download_file – Herunterladen von Files

– puppet/windows_env – Setzen von Umgebungsvariablen

– puppet/windowsfeature – Installieren von Rollen bzw. Features

– puppetlabs/chocolatey – Konfigurieren und installieren des Windows Packetmanagers Chocolatey

Viele von Windows bereitgestellte Funktionen sind in Rollen (ActiveDirectory, DHCP, DNS, Hyper-V, File and Print services, IIS, …) und Features (.NET Framework, Containers, BitLocker, BranchCache, …) aufgeteilt. Diese lassen sich über das Puppetlabs/windowsfeature Modul installieren:

windowsfeature { 'Web-WebServer':
  ensure             => present,
  installsubfeatures => true,
}

Anders sieht es mit Programmen aus, die nicht in Windows integriert sind. Geht man hier gemäß dem klassischen Ansatz vor, erfolgt die Installation über die bereitgestellten MSI oder Exe Pakete. Dies kann durchaus einige Stolperfallen bergen, zum Beispiel den Bereitstellungsplatz, die Übergabe von Installationsparametern oder Versionskonflikte.

Vergleicht man nun diesen Ansatz mit den Paketmanagern aus dem Linux-Umfeld, erweist sich dieser als wenig komfortabel.

Abhilfe schafft hier der Paketmanager Chocolatey für Windows. In Anlehnung an andere Paketmanager können Pakete mit einem einzeiligen Befehl installiert werden:

C:\> choco install mysql

Chocolatey ist gut in die meisten Configuration Management Tools wie Ansible, Chef, PowerShell, Salt und Puppet integriert:

package { 'mysql':
  ensure   => 'latest',
  provider => 'chocolatey',
}

Vier Zeilen reichen aus, um mit Puppet und Chocolatey einen MySql Server in der aktuellen Version auf einem Windows System zu installieren.

Standardmäßig werden die Pakete von einem zentralen “community package repository” bezogen. Dieses stellt derzeit 5839 „community maintained packages“ bereit. Obwohl die Pakete einer QA unterzogen werden, handelt es sich um Code, der nicht aus der eigenen Infrastruktur kommt. Dies ist in vielen Umgebungen nicht gewünscht. Doch auch darauf ist Chocolatey vorbereitet: So gibt es die Möglichkeit, ein internes Repository aufzusetzen und zu nutzen.

Aktuell gibt es vier Versionen von Chocolatey: Open Source, Pro, Architekt, Business.

Die Open Source Version ist für die meisten Anwendungsbereiche ausreichend und darf für‘s Enterprise Umfeld genutzt werden. Sobald erweiterte Funktionen wie die komfortable Erstellung eigener Pakete, Auditing, Support benötigt werden oder das Installationsvolumen in den Bereich des „Excessive Use“ abgleitet, ist eine Erweiterung auf eine kommerzielle Lizenz unumgänglich.

Fazit:

Derzeit sind auf der Puppet Forge und auf GitHub ausreichend Puppet Module zur Windows-Verwendung zu finden. Sie decken die wichtigsten Funktionen ab und haben eine hohe Qualität. Chocolatey begeistert durch seine einfache Bedienung in der Standardkonfiguration und hat das Potential noch mehr DevOps in die Windows-Welt zu bringen. Man kann also durchaus sagen, dass Puppet mittlerweile auch ein gutes Configuration Management Tool für Windows ist, das sich nicht hinter anderen Tools verstecken muss.

The following two tabs change content below.

Rainer Bopp

Neueste Artikel von Rainer Bopp (alle ansehen)