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
Meny Issakov 12 sierpień 2014, 09:21

2 odpowiedzi

Najlepsza odpowiedź

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)
4
tuomur 12 sierpień 2014, 07:02

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)
1
Meny Issakov 21 sierpień 2014, 08:01