demo.py
from fabric.api import env, run,execute
env.hosts = ['10.1.1.100','10.1.1.200']
env.remotePath = {'10.1.1.100':'/home','10.1.1.200':'/var'}
env.parallel=True
def mytask(remotePath):
run('ls %s' % remotePath)
def test():
execute(mytask,env.remotePath[env.host])
fab -f demo.py test
我想使用@parallel装饰器在10.1.1.100执行命令ls /home
,在10.1.1.200并行执行ls /var
,有没有办法让它成为可能?
答案 0 :(得分:0)
使用host_string
获取当前主机,然后使用您要使用的命令/参数。
@parallel
def mytask():
host_ip = env.host_string
remote_path = env.remotePath[host_ip]
run('ls %s' % remote_path)
根据Fabric的API文档:host_string
定义Fabric将连接到的当前用户/主机/端口 执行run,put等等。这是由fab在迭代时设置的 在先前设置的主机列表上,也可以在何时手动设置 使用Fabric作为库。
希望这会有所帮助:)