Linux-Systeme verwalten mit Spacewalk-API und Commandline

© NASA

Spaziergang

Mit dem Spacewalk-Server existiert ein umfangreiches Framework zum Verwalten von Linux-Systemen. Geht es dann um die Automatisierung von Aufgaben, stehen die XML-RPC-basierte API und das Spacecmd-Tool zur Auswahl. Dieser Artikel stellt die beiden Varianten gegenüber.
Der ADMIN 05/13 wirft einen Blick auf die frei verfügbaren Cloud-Frameworks von Eucalyptus über OpenNebula bis OpenStack. Gute Aussichten für skalierbare ... (mehr)

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.

Spacewalk-API

Ü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.

Abbildung 1: Der Spacewalk-Server bietet jede Menge XML-RPC-basierte Methoden zur Automatisierung von Aufgaben an.

Spacecmd

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

 

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023