chef: weitere TODOs erledigt

This commit is contained in:
Jörg Thalheim 2014-03-23 22:12:56 +01:00
parent dc6c68af63
commit 67b5e14d38
3 changed files with 62 additions and 43 deletions

View File

@ -44,7 +44,8 @@ Es gibt mehrere Möglichkeiten \emph{Chef} zu betreiben:
\textbf{Aufbau eines Cookbook} \textbf{Aufbau eines Cookbook}
\label{aufbau_eines_cookbook} \label{aufbau_eines_cookbook}
Hier ist die Ordnerstruktur des Cookbook apt (TODO Link) dargestellt: Hier ist die Ordnerstruktur des Cookbook
\href{https://github.com/opscode-cookbooks/apt}{apt} dargestellt:
\begin{lstlisting} \begin{lstlisting}
> apt-2.3.4/ > apt-2.3.4/
@ -138,16 +139,16 @@ dieser stehen beispielsweise Informationen mit welchen Chef-Server der Client
verbinden soll, an welcher Stelle temporäre Daten gespeichert werden soll und verbinden soll, an welcher Stelle temporäre Daten gespeichert werden soll und
der Name der Node. Letzteres ist wichtig um die Node richtig von Chef einordnen der Name der Node. Letzteres ist wichtig um die Node richtig von Chef einordnen
zu können und die richtigen Einstellungen zuzuweisen. Alternativ kann der Name zu können und die richtigen Einstellungen zuzuweisen. Alternativ kann der Name
auch von der der Bibliothek \emph{Ohai} (TODO - Link) gesetzt werden, in dem auf auch von der der Bibliothek \href{http://docs.opscode.com/ohai.html}{Ohai}
den Hostnamen oder der FQDN (Fully Qualified Domain Name) zurück gegriffen wird. gesetzt werden, in dem auf den Hostnamen oder der FQDN (Fully Qualified Domain
Ohai sammelt noch andere systemrelevante Daten wie Details über Name) zurück gegriffen wird. Ohai sammelt noch andere systemrelevante Daten wie
Hardwarekomponenten (Anzahl der CPUs, Größe und Art des RAMs, Netzwerkanbindung, Details über Hardwarekomponenten (Anzahl der CPUs, Größe und Art des RAMs,
Festplatten/SSDs, \dots), Informationen über die Plattform (Art des Netzwerkanbindung, Festplatten/SSDs, \dots), Informationen über die Plattform
Betriebssystems und Version, installierte Software) und die laufenden Prozesse. (Art des Betriebssystems und Version, installierte Software) und die laufenden
Diese Informationen sind durch eigene Ohai-Plugins erweiterbar und können dann Prozesse. Diese Informationen sind durch eigene Ohai-Plugins erweiterbar und
im Provisionierungsprozess genutzt werden um weitere Entscheidungen zu treffen. können dann im Provisionierungsprozess genutzt werden um weitere Entscheidungen
Sie sind darüber hinaus auch auf dem Server gespeichert und für andere Clients zu treffen. Sie sind darüber hinaus auch auf dem Server gespeichert und für
abrufbar. andere Clients abrufbar.
Nach dem alle Einstellungen eingelesen sind, folgte im Falle von Chef-Server, Nach dem alle Einstellungen eingelesen sind, folgte im Falle von Chef-Server,
die Authentifizierung mit diesem über den vorher auf der Node abgelegten die Authentifizierung mit diesem über den vorher auf der Node abgelegten
@ -191,4 +192,5 @@ Monitoringssystem oder per Email verschicken. In letzten Abschnitt
\textbf{Vergleich mit puppet} \textbf{Vergleich mit puppet}
\label{vergleich_mit_puppet} \label{vergleich_mit_puppet}
% vim: set spell spelllang=de_de % vim: set spell spelllang=de_de

View File

@ -2,20 +2,23 @@
\label{ssub:einrichtung-der-netzwerkdienste} \label{ssub:einrichtung-der-netzwerkdienste}
Für die Provisionierung der Netzwerkdienste wurde Für die Provisionierung der Netzwerkdienste wurde
\href{http://vagrantup.com}{\emph{vagrant}} verwendet. Dies ein Programm um auf \href{http://vagrantup.com}{Vagrant} verwendet. Dies ein Programm um auf
der Basis von Virtualbox und anderen Virtualisierungslösungen schnell und der Basis von Virtualbox und anderen Virtualisierungslösungen schnell und
reproduzierbar virtuelle Maschinen zu starten. Die Einstellungen hierfür werden reproduzierbar virtuelle Maschinen zu starten. Die Einstellungen hierfür werden
in der datei \emph{Vagrantfile} geschrieben, welches vagrant beim Start in der datei \emph{Vagrantfile} geschrieben, welches Vagrant beim Start
einliest. Vagrant bietet eine gute Integration für Chef. Es kann direkt einliest. Vagrant bietet eine gute Integration für Chef. Es kann direkt
eingestellt werden, mit welchen Einstellungen neue virtuelle Maschinen eingestellt werden, mit welchen Einstellungen neue virtuelle Maschinen
provisioniert werden sollen. Zum Einsatz kam das Betriebssystem Ubuntu 12.04 provisioniert werden sollen. Zum Einsatz kam das Betriebssystem Ubuntu 12.04
LTS. Das Basisimage hierfür wurde von \emph{opscode}, der Firma hinter Chef, LTS. Das Basisimage hierfür wurde von \emph{opscode}, der Firma hinter Chef,
bereitgestellt. Es wurde ein Netzwerkinterface konfiguriert für die bereitgestellt. Es wurde ein Netzwerkinterface konfiguriert für die
Kommunikation mit vagrant und ein weiteres Internes für ein virtuelles Netzwerk Kommunikation mit Vagrant und ein weiteres Internes für ein virtuelles Netzwerk
zwischen den VMs zum Betreiben der Netzwerkdienste. Vagrant bietet die zwischen den VMs zum Betreiben der Netzwerkdienste. Vagrant bietet für diese
Möglichkeit neben Provisionierungsystemen auch Shellskripte auszuführen. Diese erweiterten Einstellungen keine Optioen. Um diese dennoch zu übernehmen, waren
wurde genutzt um Chef auf die zum damaligen Zeitpunkt aktuellste Version 11.8.2 spezielle Kommandozeilenargumente an den Befehl \emph{VBoxManage} nötig, welches
upzudaten. von Vagrant für Virtualbox genutzt wird. Dies schränkt Nutzung allerdings auf
die Visualisierung Virtualbox ein. Vagrant bietet die Möglichkeit neben
Provisionierungsystemen auch Shellskripte auszuführen. Diese wurde genutzt um
Chef auf die zum damaligen Zeitpunkt aktuellste Version 11.8.2 upzudaten.
Gestartet wird die VM mit dem Befehl: Gestartet wird die VM mit dem Befehl:
@ -28,9 +31,9 @@ folgenden Befehl gestartet werden:
Für bestimmte Funktionen wie geteilte Ordner zwischen VM und Host müssen die Für bestimmte Funktionen wie geteilte Ordner zwischen VM und Host müssen die
\emph{virtualbox-client-modules} in der VM installiert sein. Diese sind zwar in \emph{virtualbox-client-modules} in der VM installiert sein. Diese sind zwar in
vielen Images vorhanden, die es für vagrant gibt. Allerdings muss die vielen Images vorhanden, die es für Vagrant gibt. Allerdings muss die
Virtualboxversion des Host mit dem der VM übereinstimmen. Abhilfe schafft das Virtualboxversion des Host mit dem der VM übereinstimmen. Abhilfe schafft das
Vagrantplugin \emph{vagrant-vbguest} (TODO link). Dieses überprüft beim Vagrantplugin \href{https://github.com/dotless-de/vagrant-vbguest}{vagrant-vbguest}. Dieses überprüft beim
Start die Versionen und installiert gegebenfalls eine Andere in der VM. Start die Versionen und installiert gegebenfalls eine Andere in der VM.
Als Netzwerkdienste wurden die Protokolle DHCP, DNS und NTP gewählt. Die Als Netzwerkdienste wurden die Protokolle DHCP, DNS und NTP gewählt. Die
@ -55,14 +58,14 @@ Für das Deployment wurden fünf Cookbooks geschrieben:
Dieses Cookbook richtet den ISC DHCP-Server ein. Neben der Zuordnung von Dieses Cookbook richtet den ISC DHCP-Server ein. Neben der Zuordnung von
festen IP-Adressen zu Nodes, kann ein DNS-Server und ein NTP-Server festen IP-Adressen zu Nodes, kann ein DNS-Server und ein NTP-Server
festgelegt werden. festgelegt werden.
\item[lctp-network] \item[lctp-network] Dieses Cookbook ist ein Wrappercoobook um das
Dieses Cookbook ist ein Wrappercoobook um das network\_interfaces \href{https://github.com/redguide/network_interfaces}{network\_interfaces}
(TODO link) Cookbook. Wrappercookbook werden häufig dazu benutzt um bestehende Cookbook. Wrappercookbook werden häufig dazu benutzt um bestehende Cookbooks
Cookbooks aus anderen Quellen um Funktionalität zu erweitern. In diesem Fall aus anderen Quellen um Funktionalität zu erweitern. In diesem Fall aktiviert
aktiviert das Cookbook für die Computenodes dhcp auf dem interen das Cookbook für die Computenodes dhcp auf dem interen Netzwerkinterface.
Netzwerkinterface. Auf den Headnodes wird eine statische IPadresse gesetzt, Auf den Headnodes wird eine statische IPadresse gesetzt, der DNS-Server auf
der DNS-Server auf localhost festgelegt und Ipforwarding sowie localhost festgelegt und Ipforwarding sowie Masquerading via iptables für
Masquerading via iptables für den Routerbetrieb aktiviert. den Routerbetrieb aktiviert.
\item[ntp] \item[ntp]
Dieses Cookbook richtet den NTP-Deamon ein, welcher die Zeit zwischen den Dieses Cookbook richtet den NTP-Deamon ein, welcher die Zeit zwischen den
einzelnen Knoten synchron halten soll. einzelnen Knoten synchron halten soll.
@ -82,7 +85,7 @@ Es wurden folgende externen Cookbooks verwendet:
\item[network\_interfaces] verwaltet Debians Netzkonfiguration \item[network\_interfaces] verwaltet Debians Netzkonfiguration
/etc/network/interfaces /etc/network/interfaces
\item[minitest-handler] Sammelt alle Tests in den Cookbooks führt diese \item[minitest-handler] Sammelt alle Tests in den Cookbooks führt diese
nach der Provisionierung aus (siehe~\ref{chef_minitest_handler}) nach der Provisionierung aus (siehe~\ref{minitest_handler})
\end{description} \end{description}
Zur Verwaltung der externen und internen Cookbooks wurde die Zur Verwaltung der externen und internen Cookbooks wurde die
@ -90,8 +93,9 @@ Abhängigkeitsverwaltung \href{http://berkshelf.com}{Berkshelf} verwendet. Bei
diesem gibt man die Abhängigkeiten und die gewünschte Version in einer Datei diesem gibt man die Abhängigkeiten und die gewünschte Version in einer Datei
namens Berkssfile an (vergleichbar mit Gemfile in Ruby). Berkshelf lädt diese namens Berkssfile an (vergleichbar mit Gemfile in Ruby). Berkshelf lädt diese
Abhängigkeiten aus verschiedenen Quellen herunter. (per Api von der Abhängigkeiten aus verschiedenen Quellen herunter. (per Api von der
Communityseite von Opscode, git, lokal) Für das Zusammenspiel mit vagrant gibt Communityseite von Opscode, git, lokal) Für das Zusammenspiel mit Vagrant gibt
es das Plugin vagrant-berkshelf (TODO link), so dass die von Berkshelf verwalten es das Plugin
Cookbooks auch in vagrant zur Verfügung stehen. \href{https://github.com/berkshelf/vagrant-berkshelf}{vagrant-berkshelf}, so
dass die von Berkshelf verwalten Cookbooks auch in Vagrant zur Verfügung stehen.
% vim: set spell spelllang=de_de % vim: set spell spelllang=de_de

View File

@ -23,14 +23,22 @@ man durch eigene Regeln erweitern.
\textbf{Chefspec} \textbf{Chefspec}
\label{chefspec} \label{chefspec}
Chefspec baut auf das in Ruby verbreitete Testframework Rspec auf. Dies ist ein Chefspec baut auf das in Ruby verbreitete Testframework \emph{Rspec} auf. Rspec
Vertreter des BDD (TODO mehr Infos zu BDD, Integration von Chefspec). Wie ist ein Testframework, welches auf
bereits in Abschnitt ~\ref{durchlauf_eines_recipes} erwähnt, gibt es 2 Phasen \href{http://dannorth.net/2012/05/31/bdd-is-like-tdd-if/}{Behavior Driven
bei der Ausführung von Chef. Bei Chefspec wird Provisionierungsprozess nur bis Development} (kurz BDD) basiert. Hierbei werden die Testcases in derartiger Form
zur Convergingphase, durchlaufen. Die eigenen Tests überprüfen nur die erzeugten auf geschrieben, dass sie sich selbst dokumentieren. Rspec kann aus den
Resourcen. Dies hat den Vorteil, das Tests sehr schnell durchlaufen werden, da Beschreibungen Sätze bilden und so im Falle eines fehlgeschlagen Tests schnell
keine Änderungen an einem System vorgenommen werden müssen. Dies hat Vorteile darüber Auskunft zu geben, was der Test getestet hat und wieso dieser
beim Entwickeln, weil man auf diese Weise schnell Feedback bekommt. Das fehlgeschlagen ist. Chefspec erweitert dabei Rspec um die Möglichkeit Cookbooks
zu laden und stellt spezielle Matcher (Rspec-Terminologie für Assertions)
bereit, um diese zu testen.
Wie bereits in Abschnitt~\ref{ablauf_einer_provisionierung} erwähnt, gibt es 2
Phasen bei der Ausführung von Chef. Bei Chefspec wird Provisionierungsprozess
nur bis zur Convergingphase durchlaufen. Die eigenen Tests überprüfen nur die
erzeugten Resources. Dies hat den Vorteil, das Tests sehr schnell durchlaufen
werden, da keine Änderungen an einem System vorgenommen werden müssen. Dies hat
Vorteile beim Entwickeln, weil man auf diese Weise schnell Feedback bekommt. Das
Zusammenspiel mehrerer Cookbooks lässt sich dadurch gut testen. Außerdem Zusammenspiel mehrerer Cookbooks lässt sich dadurch gut testen. Außerdem
ermöglicht es verschiedene Konfigurationen/Betriebssysteme durchzutesten, ohne ermöglicht es verschiedene Konfigurationen/Betriebssysteme durchzutesten, ohne
das diese (zeit)aufwendig aufgesetzt werden müssen. Da Chefspec allerdings nicht das diese (zeit)aufwendig aufgesetzt werden müssen. Da Chefspec allerdings nicht
@ -68,9 +76,14 @@ Die Tests werden mit dem Befehl \emph{rspec} ausgeführt. Wenn keine weiteren Ar
angegeben sind, führt dieses Programm alle Dateien unterhalb des Ordners \emph{spec} angegeben sind, führt dieses Programm alle Dateien unterhalb des Ordners \emph{spec}
aus, dessen Dateinamen auf \emph{\_spec.rb} enden. aus, dessen Dateinamen auf \emph{\_spec.rb} enden.
Um alle drei obgenannten Testmethoden gleichzeitig ausführen zu lassen, gibt es Um alle drei obgenannten Testmethoden gleichzeitig ausführen zu lassen, wurde
eine Rakefile (das in Ruby geschriebene Äquivalent zu GNU Make). Mithilfe des ein Rakefile geschrieben. \href{http://rake.rubyforge.org/}{Rake} das in Ruby
Befehls: TODO geschriebene Äquivalent zu Make, welches ein verbreitetes Buildprogramm auf
UNIX-Basierten Plattformen ist. Die Ausführung der Tests geschieht mit dem Befehl:
\shellcmd{rake test}
Dieser muss innerhalb Projektverzeichnis aufgerufen werden.
\textbf{Minitest Handler} \textbf{Minitest Handler}
\label{minitest_handler} \label{minitest_handler}