Das Tool fabric , das sich im Debian- und Ubuntu-Repository findet, fungiert als Python-Libary und Kommendozeilentool. Es bringt für einfache Aufgaben der Remoteadministration eine fertige Infrastruktur mit. Die zu erledigenden Aufgaben sind dabei Python-Funktionen, die im File fabfile.py im Homeverzeichnis des ausführenden Nutzers abgelegt sein müssen. Ein sehr einfaches Beispiel für ein solches fabfile könnte so aussehen:
from fabric.api import * env.hosts = ['xxxxx.medialinx-gruppe.de'] env.user = 'jbrendel' def remote_uptime(): run('uptime') def local_uptime(): local('uptime')
Aufgerufen passiert Folgendes:
jcb@hercules:~$ fab remote_uptime [mail.medialinx-gruppe.de] Executing task 'remote_uptime' [mail.medialinx-gruppe.de] run: uptime [mail.medialinx-gruppe.de] out: 13:20:09 up 1 day, 23:52, 17 users, load average: 0.29, 1.31, 2.42 Done. Disconnecting from xxxxx.medialinx-gruppe.de... done.
f
ab local_runtime
würde genauso funktionieren und die Uptime der lokalen Maschine ausgeben.
Da die entfernt auszuführenden Kommandos vollwertige Python-Funktionen sind, kann man hier auch recht komplexe Aufgaben formulieren. Unter anderem lassen sich mit put() lokale Files auf die entfernte Maschine transferieren und dort Kommandos mittels sudo() ausführen, etwa:
from fabric.api import * env.hosts = ['xxx.medialinx-gruppe.de'], 'yyy.medailinx-gruppe.de','zzz.medialinx-gruppe.de' ] env.user = 'jbrendel' def update(): put ("/tmp/new.config.cfg", "~/new.config.cfg") sudo( "mv ~/new.config.cfg /etc/dummyservice/", pty=true ) sudo( "/etc/init.d/dummyservice restart", pty=true )
Das File als Root-User hochzuladen wäre hier nicht möglich, deshalb braucht man zuerst ein Zielverzeichnis, das man beschreiben darf, und muss in einem zweiten Schritt sudo() nutzen. Mit ein wenig Python-Know how ist hier natürlich noch sehr viel mehr möglich, als wir in diesem kurzen Tipp demonstrieren können. Hinweise gibt die ausführliche Dokumentation von fabric , Beispiele liefert ein Tutorial .