Il passaggio di un fabric env.hosts come variabile non funziona nella funzione.Il passaggio di un fabric env.hosts come variabile non funziona nella funzione
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)
pitone main.py
['localhost']
No hosts found. Please specify (single) host string for connection:
Ma env.host_string opere!
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)
pitone main.py
localhost
[localhost] run: hostname
[localhost] out: heydevops-workspace
Ma l'env.host_string non è abbastanza per noi, si tratta di un singolo host . Forse possiamo usare env.host_string all'interno di un ciclo, ma non va bene. Perché vogliamo anche impostare il numero di attività simultanee ed eseguirle parallelamente.
Ora a ddep (il mio motore di distribuzione), io uso solo MySQLdb per ottenere i parametri quindi eseguire il comando fab come:
os.system("fab -f service/%s.py -H %s -P -z %s %s" % (project,host,number,task))
Questo è un modo semplice, ma non va bene. Perché se uso il comando fab, non riesco a cogliere le eccezioni e gli errori dei risultati in Python, per far sì che il mio ddep possa "riprovare" gli host guasti. Se utilizzo "from demo import deploy", posso controllarli e ottenerli con alcuni codici in Python.
Quindi ora "env.host" è il problema. Qualcuno può darmi una soluzione? Grazie mille.
ringrazio molto Alexander! L'ho risolto da solo, poi ho scoperto che i nostri modi sono gli stessi. – mcsrainbow
Fantastico, questo ha funzionato anche per me. Grazie! – xamox