Używam tkaniny, aby wykonać kilka poleceń zdalnych na kilku hostach, ustawienie:
env.hosts = [host1, host2, ...]
Istnieje kilka zadań, które chcę wykonać na niektórych gospodarzach, a niektóre nie. Czy jest sposób, w jaki mogę odzyskać bieżącą nazwę hosta, na którym się wykonuje?
Każda pomoc byłaby świetna. Dzięki, Meni.
2 odpowiedzi
Dlaczego nie używać różnych ról hosta?
from fabric.api import env, roles, run
env.roledefs['webservers'] = ['www1', 'www2', 'www3']
@roles('webservers')
def my_task():
run('ls -l')
Dodatkowo możesz uzyskać bieżący host wykonawczy z słownika env
}:
def my_task():
print 'Currently executing on {0}'.format(env.host)
Odpowiedź ECLAIRD zdecydowanie pomogła mi użyć lepszej praktyki podczas wykonywania zadań na kilku hostach z różnymi rólami.
Chociaż, grając z nim, wydaje się, że w zadaniu Env.host podadzi imię bieżącej nazwy hosta.
na przykład:
@parallel(pool_size=len(env.hosts))
def upload_to_s3(to):
awscreds = 'some credentials...'
cmd = '%s aws s3 sync /mnt/backup %s/%s/' % (awscreds, to, env.host)
run(cmd)
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.