Ich habe ein Python-Skript, das Fabric verwendet, um Tests auf Remote-Hosts zu starten, die otuput-Datei der Tests abzurufen und ein Parsing durchzuführen. Das Python-Skript ist keine Fabdatei.Wie können Sie Befehle auf Remote-Hosts parallel mit Fabric ohne Verwendung einer Fabdatei ausgeben?
Ich möchte die Tests parallel starten und ausführen. Ich habe gelesen, dass ich den "@parallel" -Dekorierer benutze, aber alle Beispiele, die ich gelesen habe, haben das Skript als Fabfile.
Mein Code ist so etwas wie dieses:
from fabric.api import *
# Copy the testfile on each of the hosts. This is sequential, it could be
# done in parallel but doing it in parallel is not that important
def copy_test(host_list, testfile_name):
for x in host_list:
env['host_string'] = x
target_testfile_name = "/tmp/" + testfile_name
put(testfile_name, target_testfile_name)
@parallel # Would this decorator work?
def run_test(host_list, testfile_name):
target_testfile_name = "/tmp/" + testfile_name
for x in host_list:
env['host_string'] = x
run(target_testfile_name)
if __name__ == '__main__':
HOSTS = ['10.10.10.10', '10.10.10.11', '10.10.10.12', '10.10.10.13']
testfile_name = "foo.py"
copy_test(HOSTS, testfile_name)
# I would like to launch run_test() in parallel
run_test(HOSTS, testfile_name)
Dies ist eine vereinfachte Version des Codes. Ich habe nicht alles enthalten, aber ich gehe um Konfigurationsinformationen der Gastgeber, so dass schränkt mich bei der Verwendung dieses Skript als fabfile, wo ich etwas ausgeben wie:
„fab -H '10 .10.10.10' copy_test“
"fab -H '10 .10.10.10' RUN_TEST" -P
ich konnte RUN_TEST() unter Verwendung der threading.Threads Bibliothek ausführen, aber ich würde lieber tun, als letztes Mittel.
Wie Sie sehen können, führe ich dies nicht als Fabfile.
Gibt es eine Möglichkeit, run_test() mit dem parallelen Ausführungsmodell von Fabric auszuführen, ohne mein Skript als "fabfile" auszuführen?
Nur eine andere Sache, wissen Sie über die Umgebungsvariable des Stoffes? Weil Sie Ihre Host-Liste in 'env.hosts' speichern könnten und dann müssten Sie sie nicht als Argumente übergeben – pwnsauce
pwnsauce, danke für den Vorschlag. Ich werde es versuchen und sehen, ob es mein Problem löst. – SQA777