Das Übergeben eines Fabric env.hosts-Stings als Variable funktioniert nicht in Funktion
Das Übergeben eines Fabric-env.hosts-Stings als Variable funktioniert in der Funktion nicht.
demo.py
#!/usr/bin/env python
from fabric.api import env, run
def deploy(hosts, command):
print hosts
env.hosts = hosts
run(command)
main.py
#!/usr/bin/env python
from demo import deploy
hosts = ['localhost']
command = 'hostname'
deploy(hosts, command)
python main.py
['localhost']
No hosts found. Please specify (single) host string for connection:
Aber env.host_string funktioniert!
demo.py
#!/usr/bin/env python
from fabric.api import env, run
def deploy(host, command):
print host
env.host_string = host
run(command)
main.py
#!/usr/bin/env python
from demo import deploy
host = 'localhost'
command = 'hostname'
deploy(host, command)
python main.py
localhost
[localhost] run: hostname
[localhost] out: heydevops-workspace
Aber der env.host_string reicht uns nicht, er ist ein einzelner Host. Vielleicht können wir env.host_string in einer Schleife verwenden, aber das ist nicht gut. Weil wir auch die Anzahl der gleichzeitig ausgeführten Aufgaben festlegen und parallel ausführen möchten.
Jetzt benutze ich in ddep (meiner Implementierungs-Engine) nur MySQLdb, um die Parameter abzurufen, und führe dann den folgenden Befehl aus:
os.system("fab -f service/%s.py -H %s -P -z %s %s" % (project,host,number,task))
Dies ist ein einfacher Weg, aber nicht gut. Denn wenn ich den Befehl fab verwende, kann ich die Ausnahmen und Fehler der Ergebnisse in Python nicht abfangen, damit mein ddep die ausgefallenen Hosts "wiederholen" kann. Wenn ich "from demo import deploy" verwende, kann ich sie mit einigen Codes in Python steuern und abrufen.
Jetzt ist "env.host" das Problem. Kann mir jemand eine Lösung geben? Danke vielmals.