chef: verschiedenes

This commit is contained in:
Jörg Thalheim 2014-03-19 08:59:20 +01:00
parent dc3fc48f0f
commit f97df85084
3 changed files with 37 additions and 25 deletions

View File

@ -12,7 +12,10 @@ 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. zwischen den VMs zum Betreiben der Netzwerkdienste. 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:
@ -36,6 +39,12 @@ und \emph{Computenodes}. Die Computenodes fordern auf dem internen Netzwerk per
DHCP eine IP-Adresse an und nutzen den DNS- und NTP-Dienst des jeweiligen DHCP eine IP-Adresse an und nutzen den DNS- und NTP-Dienst des jeweiligen
Headnode. Headnode.
Die Attribute der Roles und Node wurden in JSON-Dateien abgelegt in den Ordnern
\emph{roles/} und \emph{nodes}. Es gibt je eine Role für die Computenode und
Headnode. In der aktuellen Konfiguration erzeugt Vagrant eine Headnode
mit dem Hostnamen \emph{node0.lctp} und zwei Computenodes (\emph{node1.lctp} und
\emph{node2.lctp}).
Für das Deployment wurden fünf Cookbooks geschrieben: Für das Deployment wurden fünf Cookbooks geschrieben:
\begin{description} \begin{description}
\item[bind] \item[bind]
@ -76,15 +85,13 @@ Es wurden folgende externen Cookbooks verwendet:
nach der Provisionierung aus (siehe~\ref{chef_minitest_handler}) nach der Provisionierung aus (siehe~\ref{chef_minitest_handler})
\end{description} \end{description}
Zur Verwaltung der externen und internen Cookbooks wurde Zur Verwaltung der externen und internen Cookbooks wurde die
\href{http://berkshelf.com}{Berkshelf} verwendet. Bei diesem gibt man die Abhängigkeitsverwaltung \href{http://berkshelf.com}{Berkshelf} verwendet. Bei
Abhängigkeiten und die gewünschte Version in einer Datei namens Berkssfile an diesem gibt man die Abhängigkeiten und die gewünschte Version in einer Datei
(vergleichbar mit Gemfile in Ruby). namens Berkssfile an (vergleichbar mit Gemfile in Ruby). Berkshelf lädt diese
Berkshelf lädt diese Abhängigkeiten aus verschiedenen Quellen herunter. (per Api Abhängigkeiten aus verschiedenen Quellen herunter. (per Api von der
von der Communityseite von Opscode, git, lokal) Für das Zusammenspiel mit Communityseite von Opscode, git, lokal) Für das Zusammenspiel mit vagrant gibt
vagrant gibt es das Plugin vagrant-berkshelf (TODO link), so dass die von Berkshelf es das Plugin vagrant-berkshelf (TODO link), so dass die von Berkshelf verwalten
verwalten Cookbooks auch in vagrant zur Verfügung stehen. Cookbooks auch in vagrant zur Verfügung stehen.
TODO Roles und Nodes json
% vim: set spell spelllang=de_de % vim: set spell spelllang=de_de

View File

@ -4,7 +4,7 @@
\begin{itemize} \begin{itemize}
\item Analysieren Sie die Funktionsweise von Chef und gehen Sie auf \item Analysieren Sie die Funktionsweise von Chef und gehen Sie auf
Unterschiede zwischen Chef und Puppet ein Unterschiede zwischen Chef und Puppet ein
\item WählenSie zwei Netzwerkdienste aus die während der Lehrveranstaltung \item Wählen Sie zwei Netzwerkdienste aus die während der Lehrveranstaltung
besprochen wurden und erstellen Sie Provisionierungsvorlagen für diese besprochen wurden und erstellen Sie Provisionierungsvorlagen für diese
\item Beschreiben Sie wie die Verifikation von Provisionierungsvorlagen \item Beschreiben Sie wie die Verifikation von Provisionierungsvorlagen
bei der Bereitstellung von HPC-Software verwendet werden kann bei der Bereitstellung von HPC-Software verwendet werden kann

View File

@ -59,11 +59,17 @@ end
Im \emph{chef\_run}-Block wird der fiktiven Node Attribute zugewiesen und das zu Im \emph{chef\_run}-Block wird der fiktiven Node Attribute zugewiesen und das zu
testende Cookbook ausgeführt. Das Ergebnis wird in diesem Beispiel in dem Objekt testende Cookbook ausgeführt. Das Ergebnis wird in diesem Beispiel in dem Objekt
\emph{chef\_run} gespeichert. Gegen dieses Objekt wird getestet, ob bestimmte \emph{chef\_run} gespeichert. Gegen dieses Objekt wird getestet, ob bestimmte
Resourcen korrekt initialisiert wurden. In diesem Fall wird überprüft, ob Resourcen korrekt initialisiert wurden. In diesem Fall wird überprüft, ob das
Packet ntp installiert werden soll und ob das Subnetz in dem Template für
Konfigurationsdatei \emph{/etc/ntp.conf} richtig gesetzt wird.
TODO Ausführung Die Tests werden mit dem Befehl \emph{rspec} ausgeführt. Wenn keine weiteren Argumente
angegeben sind, führt dieses Programm alle Dateien unterhalb des Ordners \emph{spec}
aus, dessen Dateinamen auf \emph{\_spec.rb} enden.
TODO rake test Um alle drei obgenannten Testmethoden gleichzeitig ausführen zu lassen, gibt es
eine Rakefile (das in Ruby geschriebene Äquivalent zu GNU Make). Mithilfe des
Befehls: TODO
\textbf{Minitest Handler} \textbf{Minitest Handler}
\label{minitest_handler} \label{minitest_handler}
@ -79,22 +85,21 @@ require "minitest/spec"
eine Rspec sehr ähnliche Syntax benutzen. Um Minitest Handler zu nutzen, muss eine Rspec sehr ähnliche Syntax benutzen. Um Minitest Handler zu nutzen, muss
das Recipe aus minitest-handler-cookbook als erstes Recipe in der node geladen das Recipe aus minitest-handler-cookbook als erstes Recipe in der node geladen
werden. Minitest Handler durchsucht beim Durchlauf in jedem anderen cookbook, in werden. Minitest Handler durchsucht beim Durchlauf in jedem anderen cookbook, in
den Unterordnern von \emph{files/} nach dem Verzeichnis \emph{test} und lädt den Unterordnern in \emph{files/} nach dem Verzeichnis \emph{test} und lädt
alle Tests aus diesem Verzeichnis. Über die Beschreibungszeile: alle Tests aus diesem Verzeichnis. Über die Beschreibungszeile:
\begin{lstlisting} \begin{lstlisting}
describe_recipe "ntp::default" do # describe_recipe "ntp::default" do #
#... #...
end end
\end{lstlisting} \end{lstlisting}
wird angeben für, welches Recipe der Test gedacht ist (In diesem Fall das wird angeben für, welches Recipe der Test gedacht ist (In diesem Fall das
Defaultrecipe aus dem NTP-Cookbook). Wenn das entsprechende Recipe von der Node Defaultrecipe aus dem NTP-Cookbook). Wenn das entsprechende Recipe von der Node
ausgeführt wird, wird nach der entsprechende Test nach dem ausgeführt wird, wird der dazugehörige Test nach dem Provisionierunsdurchlauf
Provisionierunsdurchlauf ebenfalls ausgeführt. Minitest Handler erweitert Rspec ebenfalls ausgeführt. Minitest Handler erweitert Rspec um nützliche Methoden um
um nützliche Methoden um den Status des Systems zu überprüfen. Hier ein Beispiel den Status des Systems zu überprüfen. Hier ein Beispiel aus dem bind cookbook,
aus dem bind cookbook, welches in welches in Abschnitt~\ref{ssub:einrichtung-der-netzwerkdienste} erwähnt wurde:
Abschnitt~\ref{ssub:einrichtung-der-netzwerkdienste} erwähnt wurde:
\begin{lstlisting} \begin{lstlisting}
describe_recipe 'bind::default' do describe_recipe 'bind::default' do
@ -108,8 +113,8 @@ end
\end{lstlisting} \end{lstlisting}
Die Methode \emph{assert\_sh} überprüft den Exitstatus eines Befehls und schlägt Die Methode \emph{assert\_sh} überprüft den Exitstatus eines Befehls und schlägt
fehl, wenn dieser ungleich null ist, während der \emph{service} den Status eines fehl, wenn dieser ungleich Null ist, während die \emph{service}-Methode den
Systemdienst sicherstellt. Es gibt noch weitere Testmethoden, wie das Überprüfen Status eines Systemdienst sicherstellt. Es gibt noch weitere Testmethoden, wie
von Verzeichnissen, Inhalte von Dateien oder Mountpoints. das Überprüfen von Verzeichnissen, Inhalte von Dateien oder Mountpoints.
% vim: set spell spelllang=de_de % vim: set spell spelllang=de_de