从已执行的任务中检索当前主机

时间:2014-08-12 05:21:17

标签: python fabric

我通过设置:

使用fabric在多台主机上执行一些远程命令
env.hosts = [host1, host2, ...]

我想在某些主机上执行几项任务,有些我不会。 有没有办法可以检索正在执行任务的当前主机名?

任何帮助都会很棒。 谢谢, MENY

2 个答案:

答案 0 :(得分:4)

为什么不使用不同的主持人角色?

from fabric.api import env, roles, run

env.roledefs['webservers'] = ['www1', 'www2', 'www3']

@roles('webservers')
def my_task():
    run('ls -l')

此外,您可以从env字典中获取当前正在执行的主机:

def my_task():
    print 'Currently executing on {0}'.format(env.host)

答案 1 :(得分:1)

当在具有不同角色的多个主机上执行任务时,eclaird的答案肯定帮助我使用了更好的练习。

虽然在玩它时,似乎在任务中,env.host会给出当前主机名的名称。
例如:

@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)