从执行的任务中获取当前主机

2 投票
2 回答
761 浏览
提问于 2025-04-18 16:56

我正在使用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)

撰写回答