puppet vergleich überarbeitet

This commit is contained in:
Jörg Thalheim 2014-04-04 11:40:48 +02:00
parent 787d0ec2ec
commit c987540949
4 changed files with 135 additions and 126 deletions

View File

@ -228,82 +228,80 @@ Mechanismus genutzt um Tests auszuführen.
\subsubsection{Vergleich mit puppet} \subsubsection{Vergleich mit puppet}
\label{vergleich_mit_puppet} \label{vergleich_mit_puppet}
Ein anderes weiteres verbreitetes Konfigurationsmanagmentsystem ist Puppet. Es Ein ebenfalls weit verbreitetes Konfigurationsmanagmentsystem ist Puppet. Es ist
ist das Ältere der beiden Projekte. Während das erste Puppetrelease bereits im das Ältere der beiden Projekte. Während das erste Puppetrelease bereits im Jahr
Jahr 2005 von den Puppet Labs veröffentlicht wurde, erschien Chef erst 4 Jahre 2005 von den Puppet Labs veröffentlicht wurde, erschien Chef erst 4 Jahre später
später im Jahre 2009. Chef wurde stark beeinflusst von Puppet. Der Erfinder von im Jahre 2009. Chef wurde stark von Puppet beeinflusst. Der Erfinder von Chef,
Chef Adam Jacob war selbst langjähriger Puppetnutzer, bevor er Chef schrieb. Adam Jacob, war selbst langjähriger Puppetnutzer, bevor er Chef schrieb. Seine
Seine damalige Konsultantfirma betreute mehrere Firmen bei der Provisionierung damalige Konsultantfirma betreute mehrere Firmen bei der Provisionierung der
der Infrastruktur bis hin zum Deployment der Anwendung. Dabei kam Puppet zum Infrastruktur bis hin zum Deployment der Anwendung. Dabei kam Puppet zum
Einsatz. Mit steigender Anzahl der Kunden, stieg nach Aussagen von Adam Jacob Einsatz. Mit steigender Anzahl der Kunden, wuchs nach Aussagen von Adam Jacob
der Aufwand bei der Verwaltung der Puppet-Konfiguration. Diese mussten häufig der Aufwand bei der Verwaltung der Puppet-Konfiguration. Diese mussten häufig
für jeden Kunden stark angepasst oder neugeschrieben werden. Aus diesem Grund für jeden Kunden stark angepasst oder neugeschrieben werden. Aus diesem Grund
began er an ein neues Deploymentsystem zu schreiben, damals unter dem Namen begann er an ein neues Deploymentsystem zu schreiben. Damals trug es noch den
\emph{Marionette}. Dabei verwendete ebenfalls wie schon bei Puppet die Namen \emph{Marionette}. Dabei verwendete er ebenfalls, wie schon bei Puppet,
Programmiersprache Ruby zur Implementierung des Clients. Ein wichtiges die Programmiersprache Ruby zur Implementierung des Clients. Ein wichtiges
Designziel seines neues System war es, bessere Abstraktionsmöglichkeiten zu Designziel seines neuen System war es, bessere Abstraktionsmöglichkeiten zu
schaffen, um so die Wiederverwendbarkeit zu erhöhen (Quelle: schaffen, um damit die Wiederverwendbarkeit zu erhöhen (Quelle:
\cite{chefhistory}). Anzumerken ist, das seit der damals veröffentlichten \cite{chefhistory}). Anzumerken ist, dass seit der damals veröffentlichten
Puppetversion Puppetversion
(\href{https://github.com/puppetlabs/puppet/commit/ce964ecb6d6a38cb7fb9f0b13a7e6b2eb4c381c3}{0.24.5}) (\href{https://github.com/puppetlabs/puppet/commit/ce964ecb6d6a38cb7fb9f0b13a7e6b2eb4c381c3}{0.24.5})
neue Funktionen und Spracherweiterungen zu Puppet hinzugefügt wurden um dieses neue Funktionen und Spracherweiterungen zu Puppet hinzugefügt wurden, um dieses
Problem zu adressieren. Problem zu adressieren. (\cite{puppetlanguagechangelog})
(\cite{puppetlanguagechangelog})
Während bei Chef die Konfiguration in Ruby geschrieben wird, besitzt Puppet Während bei Chef die Konfiguration in Ruby geschrieben wird, besitzt Puppet
seine eigene Konfigurationssprache. Puppets Sprache ist im Gegensatz zu seine eigene Konfigurationssprache. Puppets Sprache ist im Gegensatz zu
General-Purpose-Languages wie Ruby, Java oder C/C++ eine General-Purpose-Languages wie Ruby, Java oder C/C++ eine
Domain-Specific-Language (DSL). Eine DSL ist eine eigens für den Anwendungszweck Domain-Specific-Language (DSL). Eine DSL ist eine speziell für den
geschriebene und optimierte Sprache. Sie enthält häufig Elemente und Ausdrücke, Anwendungszweck geschriebene und optimierte Sprache. Sie enthält häufig Elemente
welche es erlauben Probleme der Anwendungsdomain effizient zu lösen. Auf der und Ausdrücke, welche es erlauben, Probleme der Anwendungsdomain effizient zu
anderen Seite wird auf umfangreiche Standardbibliotheken und Sprachkonstrukte lösen. Es wird häufig auf umfangreiche Standardbibliotheken und Sprachkonstrukte
verzichtet, die in General-Purpose-Language üblich sind. Puppets Sprache wurde verzichtet, die in General-Purpose-Languages üblich sind. Puppets Sprache wurde
an das Konfigurationsformat der Überwachungssoftware Nagios angelehnt an das Konfigurationsformat der Überwachungssoftware Nagios angelehnt
(\cite{puppetlanguage}). Sie ist deklarativ gehalten und soll möglichst einfach (\cite{puppetlanguage}). Sie ist deklarativ gehalten und soll möglichst einfach
erlernbar für Administratoren, auch ohne programmiertechnischen Hintergrund, erlernbar für Administratoren, auch ohne programmiertechnischen Hintergrund,
sein. Der Schwerpunkt liegt auf der Beschreibung von \emph{Resources}. Die sein. Der Schwerpunkt liegt auf der Beschreibung von \emph{Resources}. Die
Sprache besitzt Kontrollstrukturen wie Case- und If-Statements. Es gibt Sprache besitzt Kontrollstrukturen wie Case- und If-Statements. Es gibt
Datentypen wie \emph{Strings}, \emph{Booleans}, \emph{Arrays}, \emph{Reguläre Datentypen wie \emph{Strings}, \emph{Booleans}, \emph{Arrays}, \emph{Reguläre
Ausdrücke} und \emph{Hashes}, welche Variablen zugewiesen werden können. Die Ausdrücke} und \emph{Hashes}. Diese können in Variablen gespeichert werden. Die
\href{https://forge.puppetlabs.com/puppetlabs/stdlib}{Standartbibliothek} von \href{https://forge.puppetlabs.com/puppetlabs/stdlib}{Standardbibliothek} von
Puppet stellt Funktionen, um auf diesen Datentypen einfache Operationen Puppet stellt Funktionen bereit, um auf diesen Datentypen einfache Operationen
auszuführen. Allerdings ist es nicht möglich Schleifen auszuführen. (Diese auszuführen. Allerdings ist es nicht möglich, Schleifen auszuführen. (Diese
\href{http://docs.puppetlabs.com/puppet/latest/reference/experiments_lambdas.html}{Funktion} \href{http://docs.puppetlabs.com/puppet/latest/reference/experiments_lambdas.html}{Funktion}
ist momentan als experimental markiert). Funktionen können nicht direkt in ist momentan als \emph{experimental} markiert). Funktionen können nicht direkt in
Puppets Sprache definiert werden. Stattdessen werden diese als Erweiterung des Puppets Sprache definiert werden. Stattdessen werden diese als Erweiterung des
Parsers in Ruby implementiert, was wiederum den den Nachteil hat, dass dafür Parsers in Ruby implementiert, was wiederum den Nachteil hat, dass dafür
eine weitere Sprachen erlernt werden muss. Manche Unternehmen und Organisationen eine weitere Sprachen erlernt werden muss. Manche Unternehmen und Organisationen
greifen bevorzugt auf Puppet zurück, weil es einfacher ist neue Mitarbeiter ohne greifen bevorzugt auf Puppet zurück, weil es einfacher ist, neue Mitarbeiter ohne
Rubykenntnisse in diesem Framework zu schulen. Andere wie bevorzugen die Rubykenntnisse in diesem Framework zu schulen. Andere wiederum bevorzugen die
Flexibilität von Ruby. Facebook gab dies als einen der Gründe an, warum sie im Flexibilität von Ruby. Facebook gab dies als einen der Grund an für einen
Jahre 2013 von \emph{CFEngine2} auf \emph{Chef 11} umgestiegen sind Umstieg im Jahre 2013 von \emph{CFEngine2} auf \emph{Chef 11}
\cite{facebooklikeschef}. \cite{facebooklikeschef}.
Das strukturelle Äquivalent zu \emph{Cookbooks} in Chef ist in Puppet das Das strukturelle Gegenstück zu \emph{Cookbooks} in Chef ist das
Puppet-Module. Diese werden in der Community ausgetauscht und entwickelt. Da \emph{Puppet-Module} in Puppet. Diese werden in der Community entwickelt. Da
Puppet älter ist, ist zu erwarten das hierfür mehr Puppet-Module zu Verfügung Puppet älter ist, ist anzunehmen, dass hierfür mehr Puppet-Module zur Verfügung
stehen als für Cookbooks für Chef. Die primäre Distributionsquelle ist stehen, als Cookbooks für Chef. Die primäre Distributionsquelle ist
\href{https://forge.puppetlabs.com/}{Puppet Forge} in dem \textbf{2206} \href{https://forge.puppetlabs.com/}{Puppet-Forge}, in dem \textbf{2206}
\href{https://forge.puppetlabs.com/modules?supported=yes}{Module} zu Verfügung \href{https://forge.puppetlabs.com/modules?supported=yes}{Module} zur Verfügung
stehen (Stand: 31.03.2014). Für Chef gibt es eine ähnliche stehen (Stand: 31.03.2014). Für Chef gibt es eine ähnliche
\href{http://community.opscode.com/}{Community-Seite} mit \textbf{1368} \href{http://community.opscode.com/}{Community-Seite} mit \textbf{1368} Modulen,
Modulen, (Stand: 31.03.2014 - ermittelt über die (Stand: 31.03.2014 - ermittelt über die
\href{https://cookbooks.opscode.com/api/v1/cookbooks?start}{API}). Zu einer \href{https://cookbooks.opscode.com/api/v1/cookbooks?start}{API}). Zu einer
weiteren wichtigen Quelle hat sich die Plattform weiteren wichtigen Quelle hat sich die Plattform
\href{https://github.com}{Github} für beide Projekte entwickelt. Für einen \href{https://github.com}{Github} für beide Projekte entwickelt. Für einen
Vergleich wurde die Anzahl der Suchtreffer für Projekte, die die Suchbegriffe Vergleich wurde die Anzahl der Suchtreffer für Projekte, die die Begriffe
``Chef'' und ``Puppet'' in der Suchmaschine auf Github herangezogen. Github filtert ``Chef'' und ``Puppet'' in der Suchmaschine auf Github herangezogen. Github
Forks (Abspaltungen) von Projekten aus den Suchergebnissen heraus und filtert Forks (Abspaltungen) von Projekten aus den Suchergebnissen heraus und
schlüsselt die Ergebnisse nach Programmiersprache auf. Es wurden alle schlüsselt die Ergebnisse nach Programmiersprache auf. Es wurden alle Sprachen
Programmiersprachen in beide Projekte mit weniger als 100 Suchtreffer aus in beiden Projekte mit weniger als 100 Suchtreffer aus Übersichtlichkeitsgründen
Übersichtlichkeitsgründen nicht in das in Diagramm übernommen (siehe Tabelle). nicht in das Diagramm übernommen (siehe Tabelle). Eine Stichproben der
Eine kurze Stichproben der Suchergebnisse, dass die Suchtreffer sich überwiegend Ergebnisse, dass die Suchtreffer sich überwiegend mit den eigentlichen Projekten
mit den eigentlichen Projekten Chef und Puppet beschäftigen. Anzumerken ist, das Chef und Puppet beschäftigen. Anzumerken ist, dass Zielgruppe von Puppet
Zielgruppe von Puppet eher Systemadminstratoren aus besteht, während Chef auch überwiegend Systemadminstratoren aus besteht, während Chef auch von vielen
von vielen Entwicklern genutzt wird. Letztere verwenden bevorzugt Github. Entwicklern genutzt wird. Letztere verwenden bevorzugt Github.
\begin{figure}[H]
\begin{figure}[h]
\pgfplotstableread{ \pgfplotstableread{
%Gesamt Puppet Ruby Shell Python Javascript Perl %Gesamt Puppet Ruby Shell Python Javascript Perl
12661 0 9902 321 148 124 42 12661 0 9902 321 148 124 42
@ -317,7 +315,7 @@ von vielen Entwicklern genutzt wird. Letztere verwenden bevorzugt Github.
\begin{axis}[ybar, \begin{axis}[ybar,
width=\textwidth, width=\textwidth,
enlarge x limits=0.5, enlarge x limits=0.5,
height=15cm, height=10cm,
ymin=0, ymin=0,
ymax=17000, ymax=17000,
scaled x ticks = false, scaled x ticks = false,
@ -350,100 +348,105 @@ von vielen Entwicklern genutzt wird. Letztere verwenden bevorzugt Github.
\end{axis} \end{axis}
\end{tikzpicture} \end{tikzpicture}
\caption{Anzahl der Suchtreffer auf Github aufgeschlüsselt nach \caption{Anzahl der Suchtreffer auf Github aufgeschlüsselt nach
Programmiersprache für die Begriffe ``Chef'' und ``Puppet''} Programmiersprache für die Begriffe ``Chef'' und ``Puppet''.}
\end{figure} \end{figure}
Rohdaten für das Diagramm \begin{table}[h]
\caption{Rohdaten für das Diagramm}
\begin{tabular}{l|c|c|c|c|c|c|c|c|c|c|c|c} \begin{tabular}{l|c|c|c|c|c|c|c|c|c|c|c|c}
Sprache & Ruby & Puppet & Shell & Python & Javascript & Perl & PHP & Java & VimL & CSS & C & C++ \\\hline Sprache & \textbf{Ruby} & \textbf{Puppet} & \textbf{Shell} & \textbf{Python} & \textbf{Javascript} & \textbf{Perl} & \textbf{PHP} & \textbf{Java} & \textbf{VimL} & \textbf{CSS} & \textbf{C} & \textbf{C++} \\\hline
Chef & 9,902& - & 321 & 148 & 124 & 42 & 56 & 88 & - & 31 & 48& 37 \\\hline \textbf{Chef} & 9,902& - & 321 & 148 & 124 & 42 & 56 & 88 & - & 31 & 48& 37 \\\hline
Puppet & 3,108& 7,315 & 751 & 207 & 157 & 137 & 82 & 42 & 64 & 23 & - & - \\ \textbf{Puppet} & 3,108& 7,315 & 751 & 207 & 157 & 137 & 82 & 42 & 64 & 23 & - & - \\
\end{tabular} \end{tabular}
\end{table}
\vspace{0.5cm} \vspace{0.5cm}
Eine andere wichtige Statistik für Opensourceprojekte ist die Anzahl der Eine weitere wichtige Statistik für Opensourceprojekte ist die Anzahl der
Subscriber auf den jeweiligen Mailinglisten. Abonnenten auf den jeweiligen Mailinglisten.
\begin{description} \begin{description}
\item[chef@lists.opscode.com] Community-Mailingliste, 1620 Leser, \href{http://lists.opscode.com/sympa/info/chef}{Quelle}, Stand: 31.03.2014 \item[chef@lists.opscode.com] Community-Mailingliste, 1620 Abonnenten, \href{http://lists.opscode.com/sympa/info/chef}{Quelle}, Stand: 31.03.2014
\item[chef-dev@lists.opscode.com] Entwickler-Mailingliste, 652 Leser, \href{http://lists.opscode.com/sympa/info/chef-dev}{Quelle}, Stand: 31.03.2014 \item[chef-dev@lists.opscode.com] Entwickler-Mailingliste, 652 Abonnenten, \href{http://lists.opscode.com/sympa/info/chef-dev}{Quelle}, Stand: 31.03.2014
\item[puppet-users@googlegroups.com] Community-Mailingliste, \textasciitilde{}7000 Leser, Quelle: \href{https://twitter.com/puppetlabs/status/450760644329881600}{Anfrage per Twitter}, Stand: 01.04.2014 \item[puppet-users@googlegroups.com] Community-Mailingliste,
\textasciitilde{}7000 Abonnenten, Quelle: \href{https://twitter.com/puppetlabs/status/450760644329881600}{Anfrage per Twitter}, Stand: 01.04.2014
\end{description} \end{description}
Mailinglisten eigenen sich um qualitiv die aktive Nutzer beider Projekte zu Mailinglisten eignen sich, um qualitiv die aktiven Nutzer beider Projekte zu
vergleichen. Sie ist neben dem Bugtracker ein wichtiges Mittel der vergleichen. Neben dem Bugtracker ist stellt die Mailingliste ein wichtiges
Kommmunikation. Kommunikationsmittel dar.
Die Zahlen weisen darauf hin, dass Puppet nach wie vor eine größere Community Die Zahlen weisen darauf hin, dass Puppet nach wie vor eine größere Community
hat. hat.
Anstelle von Recipes werden in Puppet Manifests geschrieben. Das sind Dateien, Anstelle von Recipes werden in Puppet Manifests geschrieben. Das sind Dateien,
die auf Endung .pp enden und sich in dem Ordner \emph{manifests} im die auf den Suffix .pp enden und sich in dem Ordner \emph{manifests} im
Puppet-Module befinden. Jedes Manifest definiert eine \emph{Class} eingeleitet Puppet-Module befinden. Jedes Manifest definiert eine \emph{Class}, eingeleitet
durch das Schlüsselwort \emph{class}. Der Namen dieser Klasse wird aus dem durch das Schlüsselwort \emph{class}. Der Namen dieser Klasse wird aus dem
Module-Namen und Manifest-Namen gebildet. Wenn das Module ``foo'' das Manifest Module-Namen und Manifest-Namen gebildet. Wenn das Module ``foo'' das Manifest
``bar'' enthält, ist der Name der Class ``foo::bar''. Außnahme bildet das ``bar'' enthält, ist der Name der Class ``foo::bar''. Eine Ausnahme bildet das
Manifest \emph{init.pp}, bei dem die Class nur ``bar'' lauten würde. Diese Manifest \emph{init.pp}, bei dem die Class nur ``bar'' lauten würde. Diese
Benennungskonvention wurde in Chef übernommen, um Recipes in Cookbooks zu Benennungskonvention wurde in Chef übernommen, um Recipes in Cookbooks zu
referenzieren (anstelle von \emph{init.rb} lautet die Datei \emph{default.rb}). referenzieren (anstelle von \emph{init.pp} lautet die Datei \emph{default.rb}).
Allerdings werden in Recipes keine separaten Objekt definiert und der ganze Allerdings werden in Recipes keine separaten Objekt definiert und der ganze
Inhalt der Datei bildet das Recipe. Inhalt der Datei bildet das Recipe.
Eine Class in Puppet kann über Parameter konfiguriert werden. Parameter werden Eine Class in Puppet kann über Parameter konfiguriert werden. Parameter werden
im Kopfteil der Class deklariert und können Standartwerte besitzen. Chef besitzt im Kopfteil der Class deklariert und können Standardwerte besitzen. Chef besitzt
mit Attributes ein vergleichbares Konzept. Allerdings werden Attributes mit \emph{Attributes} ein vergleichbares Konzept. Allerdings werden Attributes
getrennt von den Recipes definiert und sie werden dem Node-Objekte zugewiesen. getrennt von den Recipes definiert und sie werden dem Node-Objekte zugewiesen.
Die Attributes stehen somit allen Recipes zu Verfügung können und können an Die Attributes stehen somit allen Recipes zu Verfügung und können an
verschiedenen Stellen überschrieben werden. In Puppet 3 wurde diese Trennung verschiedenen Stellen überschrieben werden. In Puppet 3 wurde diese Trennung
von Code und organsationsspezifischen Daten durch die Erweiterung \emph{Hiera} von Code und organsationsspezifischen Daten durch die Erweiterung \emph{Hiera}
ebenfalls eingeführt. Class-Parameter werden automatisch in der hieradb gesucht ebenfalls eingeführt. Class-Parameter werden automatisch in der \emph{Hieradb}
und gegebenfalls überschrieben. Hiera-Attribute können spezifisch für einzelne gesucht und gegebenfalls überschrieben. Hiera-Attribute können spezifisch für
Nodes gesetzt werden oder für die gesamte Organisation. In älteren Versionen von einzelne Nodes oder für die gesamte Organisation gesetzt werden. In älteren
\emph{Puppet} wurden Attributes und Module für die einzelnen Nodes in der Versionen von \emph{Puppet} wurden Attributes und Module für die einzelnen Nodes
zentralen \emph{site.pp}-Manifest verwaltet. Hiera ersetzt die \emph{site.pp} in der zentralen \emph{site.pp}-Manifest verwaltet. Hiera ersetzt die
weitest gehend. Durch die Funktion \emph{hiera\_include} können Classes im \emph{site.pp} weitest gehend. Durch die Funktion \emph{hiera\_include} können
Hiera-Backend gesetzt werden (ähnlich der Run-List in Chef). Classes im Hiera-Backend gesetzt werden (ähnlich der Run-List in Chef).
Resources heissen in Puppet Types. Puppet liefert wie Chef eine Reihe von Resources heissen in Puppet Types. Puppet liefert wie Chef bereits eine Reihe
Resources/Types, die Core-Types. Wie auch in Chef können Types in Puppet mehrere von Types mit. Diese werden Core-Types genannt. Wie auch in Chef können Types in
plattformspezifische Provider besitzen. Es ist möglich eigene Types zu Puppet mehrere plattformspezifische Provider besitzen. Es ist möglich, eigene
definieren, auch Custom-Types genannt (Ähnlich LRWP in Chef). Die Types zu definieren, auch Custom-Types genannt (Ähnlich LRWP in Chef). Die
Implementierung der Types/Provider erfolgt in Ruby im Verzeichnis Implementierung der Types/Provider erfolgt in Ruby im Verzeichnis
\emph{lib/puppet}. Die Zustände einer Resource können in Puppet über das \emph{lib/puppet}. Die Zustände einer Resource können in Puppet über das Setzen
Setzen des Parameters \emph{ensure} festgelegt werden (vergleichbar mit \emph{action} in des Parameters \emph{ensure} festgelegt werden (vergleichbar mit \emph{action}
Chef). in Chef).
Ein anderes häufig genutztes Pattern, um Resources zu gruppieren, ist die auch Ein weiteres häufig genutztes Pattern, um Resources zu gruppieren, ist der
schon aus Chef bekannte \emph{Definition}. Diese kann im Gegensatz zum \emph{Defined-Type}. Dieser ist das Äquivalent zur aus Chef bekannte
Custom-Type auch direkt in der Puppet-Sprache mit Schlüsselwort \emph{define} \emph{Definition}. Ein Defined-Type kann im Gegensatz zum Custom-Type auch
definiert werden. direkt in der Puppet-Sprache mit dem Schlüsselwort \emph{define} erstellt
werden.
Um zu Beginn Informationen über das zu provisionierende System zu sammeln, wird Vor der eigentlichen Provisionierung werden Informationen über das System zu
auf die Bibliothek \href{http://puppetlabs.com/facter}{Facter} zurückgriffen. In gesammelt. Dabei wird auf die Bibliothek
frühen Versionen von Chef wurde die gleiche Bibliothek verwendet, bevor später \href{http://puppetlabs.com/facter}{Facter} zurückgegriffen. In frühen Versionen
von Chef wurde die gleiche Bibliothek verwendet, bevor später
\href{http://docs.opscode.com/ohai.html}{Ohai} integriert wurde. \href{http://docs.opscode.com/ohai.html}{Ohai} integriert wurde.
Chef benutzt die gleiche Template-Syntax wie Puppet (eRuby). Einziger Chef benutzt die gleiche Template-Syntax wie Puppet (eRuby). Der einzige
Unterschied bei Chef ist die Funktion für verschiedene Unterschied bei Chef ist die Funktion für verschiedene Plattformen und
Plattformen/Plattformversionen verschiedene Templatevarianten der selben Datei -versionen verschiedene Template-Varianten der gleichen Datei im Cookbook
im Cookbook vorzuhalten. Die Varianten werden durch Unterordner im vorzuhalten. Die Varianten werden durch Unterordner im Verzeichnis
\emph{templates/} unterschieden (z.B. \emph{templates/windows} oder \emph{templates/} unterschieden (z.B. \emph{templates/windows} oder
\emph{templates/ubuntu-12.04}). Falls kein der Plattform entsprechende Ordner \emph{templates/ubuntu-12.04}). Falls kein der Plattform entsprechende Ordner
existiert fällt Chef auf \emph{templates/default} zurück. existiert sucht Chef im Verzeichnis \emph{templates/default}.
Ein wesentlicher Unterschied zwischen Puppet und Chef ist die Reihenfolge der Ein wesentlicher Unterschied zwischen Puppet und Chef ist die Reihenfolge der
Ausführung von Resources. Chef überprüft die Resources in der Reihenfolge, in Ausführung von Resources. Chef überprüft die Resources in der Reihenfolge, in
der sie in der Run-List und in den Recipes geladen werden. Puppet sortiert der sie in der Run-List und in den Recipes geladen werden. Puppet sortiert
Resources um. Bei Puppet deswegen spricht man von modelbasiertem Resources um. Bei Puppet spricht man von modelbasiertem Konfigurationsmanagment,
Konfigurationsmanagment. Da manche Resources voneinander abhängen kann durch während Chef ein \href{http://www.getchef.com/solutions/configuration-management/}{codebasiertes
die Angabe der Parameter \emph{before} und \emph{require} die Reihenfolge Konfigurationsmanagment} ist. Da manche Resources voneinander abhängen, kann durch die Angabe der
festgelegt werden. Über die Parameter \emph{notify} und \emph{subscribe} können Parameter \emph{before} und \emph{require} die Reihenfolge festgelegt werden.
darüber hinaus Resourcen aktualisiert werden, wenn sich eine Abhängigkeit Über die Parameter \emph{notify} und \emph{subscribe} können darüber hinaus
geändert hat (z.B. kann ein Dienst neugestartet werden, wenn sich die dazu Resourcen aktualisiert werden, wenn sich eine Abhängigkeit geändert hat (z.B.
gehörige Konfiguration verändert hat). In Chef kann Letzeres über die Paramether kann ein Dienst neugestartet werden, wenn sich die dazu gehörige Konfiguration
\emph{notifies} und \emph{subscribes} angegeben werden. verändert hat). In Chef kann Letzeres über die Parameter \emph{notifies} und
\emph{subscribes} angegeben werden.
Wie auch Chef bietet Puppet verschiedene Betriebsmodi. Im einfachsten Fall wird Wie auch Chef bietet Puppet verschiedene Betriebsmodi. Im einfachsten Fall wird
mit dem Befehl \emph{puppet apply} ein lokales Manifest geladen werden mit dem Befehl \emph{puppet apply} ein lokales Manifest geladen werden
@ -451,31 +454,33 @@ mit dem Befehl \emph{puppet apply} ein lokales Manifest geladen werden
Puppetmaster, zu welchem sich der Client \emph{Puppetd} verbindet und mittels Puppetmaster, zu welchem sich der Client \emph{Puppetd} verbindet und mittels
SSL-Zertifikaten authentifiziert. In der Standarteinstellung setzt Puppetmaster SSL-Zertifikaten authentifiziert. In der Standarteinstellung setzt Puppetmaster
auf den verhältnismäßig einfachen Webserver WEBrick. Dieser skaliert allerdings auf den verhältnismäßig einfachen Webserver WEBrick. Dieser skaliert allerdings
nicht über einen CPU-Core. Für größere Installationen wird Passenger oder nicht über einen CPU-Core. Für größere Installationen werden Passenger oder
Mongrel als Applikationsserver empfohlen mit Nginx als Load-Balancer. Ein Mongrel als Applikationsserver empfohlen, wobei Nginx als Load-Balancer fungiert. Ein
anderer beliebter Ansatz zum Skalieren größerer Cluster ist das Verwalten der beliebter Ansatz zum Skalieren größerer Cluster ist das Verwalten der
Manifeste in einem Git-Repository, wobei Puppet periodisch über einen Cron-Job Manifeste in einem Git-Repository, wobei Puppet periodisch über einen Cron-Job
aufgerufen wird und die ausgecheckten Manifeste ausführt. Während Chef-Server aufgerufen wird und die ausgecheckten Manifeste ausführt. Während Chef-Server
bis zur Version 10 wie Puppet-Master in Ruby geschrieben war, wurde der API-Teil von bis zur Version 10 wie Puppet-Master in Ruby geschrieben war, wurde der API-Teil von
Chef-Server wurde in Version 11 in der Programmiersprache Erlang neugeschrieben. Chef-Server wurde in Version 11 in der Programmiersprache Erlang neugeschrieben.
Die Zahl der Nodes, die von einem Server bedient werden, soll sich dabei Die Zahl der Nodes, die von einem Server bedient werden, soll sich dabei
vervierfacht haben auf bis zu 10.000 Nodes pro Server (Quelle: vervierfacht haben und kann somit bis zu 10.000 Nodes bedienen (Quelle:
\cite{chefscale}). Für Puppet wurden keine verlässlichen Zahlen gefunden, wie \cite{chefscale}). Für Puppet wurden keine Statistiken gefunden, die eine Aussage
viele Nodes pro Server betreut werden können. Allerdings ist anzunehmen, dass darüber treffen, wieviele Nodes pro Server betreut werden können. Allerdings ist
die Zahl architekturbedingt unter der von Chef liegt. anzunehmen, dass die Anzahl der Server, bedingt durch die genutzte Architektur,
kleiner ist als bei Chef.
Zu den von offiziell von Chef unterstützt Plattformen gehören Windows, MacOS X, Zu den, von offiziell von Chef unterstützten, Plattformen gehören Windows, MacOS X,
verschiedene Linuxderivate (Debian, Ubuntu, Redhat\ldots) und Solaris. Puppet verschiedene Linuxderivate (Debian, Ubuntu, Redhat, \ldots) und Solaris. Puppet
bietet breiteren Support und unterstützt zusätzlich Free- und OpenBSD sowie bietet breiteren Support und unterstützt zusätzlich Free- und OpenBSD sowie
HP-UX und AIX. HP-UX und AIX.
Chef und Puppet bieten den gleichen Funktionsumfang. Die darunter liegenden Zusammenfassend lässt sich feststellen, dass Chef und Puppet den gleichen
Grundkonzepte sind ähnlich, so das Anwender des einen Systems mit wenig Aufwand Funktionsumfang bieten. Die Grundkonzepte sind ähnlich, so ein Anwender des
auch das andere System verstehen. Die beiden Firmen hinter den Produkten, Puppet einen Systems mit wenig Aufwand auch das andere System lernen kann. Die beiden
Labs und Chef, stehen, enwickeln das Produkt stetig weiter und bieten Firmen, Puppet Labs und Chef, enwickeln beide ihr Produkt stetig weiter und
kommerziellen Support. Während Puppet auf den klassischen Systemadminstrator bieten kommerziellen Support. Während Puppet auf den klassischen
abzielt, ist Chef ein Produkt der Systemadminstrator abzielt, ist Chef ein Produkt der
\href{http://www.getchef.com/solutions/devops/}{DevOps}-Bewegung, bei welcher \href{http://www.getchef.com/solutions/devops/}{DevOps}-Bewegung, bei welcher
adminstrative Teil einer Organisation stärker Entwicklung verzahnt wird. der (operative) adminstrative Teil einer Organisation stärker mit der
Entwicklung verzahnt wird.
% vim: set spell spelllang=de_de % vim: set spell spelllang=de_de

View File

@ -0,0 +1,5 @@
%TODO Resume und Ausblick
% welche Erkenntnisse wurden gewonnen
% Ansible, Salt.

View File

@ -139,6 +139,4 @@ Fehler werden in der Regel schon von den Provider erkannt und festgestellt.
Minitest-Handler kann dies Erweitern um protokollspezifische Tests durchzuführen Minitest-Handler kann dies Erweitern um protokollspezifische Tests durchzuführen
oder das Testen von Funktionalität bestimmter Dienste. oder das Testen von Funktionalität bestimmter Dienste.
TODO Resume und Ausblick
% vim: set spell spelllang=de_de % vim: set spell spelllang=de_de

View File

@ -4,5 +4,6 @@
\input{chef/chef-comparison} \input{chef/chef-comparison}
\input{chef/chef-services} \input{chef/chef-services}
\input{chef/chef-tests} \input{chef/chef-tests}
\input{chef/chef-resume}
\pagebreak \pagebreak