从执行的任务中获取当前主机
我正在使用fabric这个工具,在几个主机上执行一些远程命令,具体设置如下:
env.hosts = [host1, host2, ...]
我有几个任务想在一些主机上执行,但有些主机我不想执行这些任务。请问有没有办法获取当前正在执行任务的主机名?
任何帮助都非常感谢。
谢谢,
Meny
2 个回答
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)
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)