我通过设置:
使用fabric在多台主机上执行一些远程命令env.hosts = [host1, host2, ...]
我想在某些主机上执行几项任务,有些我不会。 有没有办法可以检索正在执行任务的当前主机名?
任何帮助都会很棒。 谢谢, MENY
答案 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)
虽然在玩它时,似乎在任务中,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)