Das Management-Framework Spacewalk war bereits Thema in einer früherer ADMIN-Ausgabe [1] . Ich möchte daher an dieser Stelle einmal von der bekannten Weboberfläche weggehen und stattdessen skriptbasierte Lösungen aufzeigen, um Aufgaben zu erledigen. Zum einen existiert hier mit der Spacewalk-API eine sehr umfangreiche Variante, um nur alle erdenklichen Aufgaben auf dem Server durchzuführen. Allerdings muss der Admin teilweise doch recht komplexe Skript-Konstrukte bauen, wenn es darum geht, umfangreiche Arbeiten auf dem Server zu erledigen. Welche Sprache hierfür zum Einsatz kommt, ist erstmal nebensächlich, wichtig ist lediglich, dass sie XML-RPC-Aufrufe unterstützt. Überwiegend wird man hier jedoch Perl- und Python-Skripte vorfinden.
Das Tool Spacecmd greift ebenfalls auf die XML-RPC-basierte API des Spacewalk-Servers zurück, kapselt deren Aufrufe aber in handliche Optionen. Das Tool wird entweder im interaktiven Modus gestartet und nimmt dann entsprechende Anweisungen entgegen oder aber man übergibt alle notwendigen Optionen und kann das Tool somit auch in eigenen Bash-Skripten verwenden. Mancher Admin hantiert doch lieber mit der Bash als mit ellenlangen Python- oder Perl-Programmen. Nachfolgend werden die beiden Varianten gegenübergestellt und miteinander verglichen.
Üblicherweise erfordert jedes Skript, das mit der Spacewalk-API sprechen möchte, ein Client- und ein Session-Objekt. Das Session-Objekt dient zur Authentifizierung auf dem Server und ist bei jedem Methoden-Aufruf mit anzugeben. Damit nun nicht in jedem Skript der Benutzername und das Passwort für den Zugriff auf den Server mit angegeben werden muss, bietet es sich an, ein Modul zu schreiben und dieses in die jeweiligen Skripte einzubinden.
Listing 1
zeigt ein Beispiel für ein solches Modul für die Skriptsprache Perl. Dieses Modul speichert man entweder im Ordner mit den API-Skripten ab oder legt es besser noch in das Verzeichnis der Perl-Module. Welche das sind, zeigt beispielsweise der Aufruf von
»perl -V
«
an. Das Modul erfordert eine Konfigurationsdatei
»/etc/sysconfig/spacewalk_api.conf
«
, in der, mit Leerzeichen getrennt, der Spacewalk-Server sowie der Benutzername und Passwort für den Zugriff auf den Server aufgeführt sind. Über die Angabe von
»use RHNSession
«
im Header eines API-Skriptes kann man nun auf dieses Modul zurückgreifen.
Listing 1
RHNSession.pm
Das Skript in
Listing 2
zeigt ein einfaches Beispiel. Es bindet das soeben erzeugte Modul wie beschrieben ein und ruft die Methode
»channel.listSoftwareChannels
«
auf dem Spacewalk-Server auf, die dann eine Liste der verfügbaren Software-Kanäle auf dem Bildschirm ausgibt – zugegebenermaßen ein recht einfaches Skript.
Listing 2
listSoftwareChannels.pl
Mit der Spacewalk-API lassen sich aber natürlich auch komplexere Aufgaben erledigen, wie beispielsweise das Erzeugen oder Modifizieren von Software- und Konfigurations-Kanälen, Kickstart-Dateien oder Systemgruppen. Eine Liste der zur Verfügung stehenden Methoden erhält man unter der URL http://spacewalk-server/rhn/apidoc/ ( Abbildung 1 ). Hier finden sich auch einige Beispiele für Perl- und Python-Skripte, die auf die Spacewalk-API zurückgreifen.
Man kann sich vorstellen, dass je nach Anforderung die Skripte recht umfangreich werden. Das Tool
»spacecmd
«
verbirgt diese Komplexität und macht es auch Spacewalk-Einsteigern recht leicht, komplexe Aufgaben über einfache Bash-Skripte zu automatisieren. Das Tool ist mittlerweile Teil der offiziellen Spacewalk-Quellen und steht somit über die Website
[2]
zum Download bereit.
Beim Aufruf von Spacecmd werden die beiden Konfigurationsdateien
»/etc/spacecmd.conf
«
und
»~/.spacecmd/config ausgewertet
«
. Hier lassen sich Server- und Authentifizierungs-Informationen hinterlegen:
[spacecmd] server=sat.virt.tuxgeek.de username=admin password=pw nossl=0
Im interaktiven Modus bietet das Tool eine Tab Completion an, was sehr hilfreich ist, wenn man nach einer Methode sucht, deren Namen aber nicht im Kopf hat.
Um nun das Beispiel aus
Listing 2
mit dem Spacewalk-Tool zu implementieren, reicht es aus, im interaktiven Modus einfach das Kommando
»softwarechannel_list
«
einzugeben. Das Ergebnis wird identisch mit dem des Perl-Skriptes sein. Lediglich der Aufwand für die Entwicklung des Skriptes ist geringer.
Für komplexere Aufgaben bietet es sich an, die Spacecmd-Aufrufe in einem Bash-Skript zusammenzuführen.
Listing 3
zeigt ein einfaches Beispiel, das herausbekommt, welche Systeme auf welche Software-Kanäle des Spacewalk-Servers zurückgreifen. Das Ergebnis des ersten Spacecmd-Aufrufs wird dabei in der Variablen
»CHANNELS
«
gespeichert. Anschließend iteriert man durch die Liste und übergibt jedes Element – in der Variablen
»c
«
gespeichert – an den zweiten Spacecmd-Aufruf. Alles weitere ist nur noch Kosmetik.
Listing 3
SystemToSWChannel.sh