在Fabric中的任务之间使用变量

时间:2015-09-28 21:06:28

标签: python fabric

我有一个fabfile的问题。我有下一个脚本

temp = []

    rolesdef = { server1: [user@server.com],
server2: [user@server2.com, user@server3.com]
}

@task
@roles('server1')
def first():
  ...do something...
  temp = something

@task
@roles('server2')
@parallel
def second():
  ...do something...
  run(temp)

我如何使用" temp"在second()中定义的第一个()? 另外,我想在一次执行fabfile期间在server1上执行first(),在server2上执行second()。

我应该使用execute()但是如何设置auth的密码与#34; hosts"?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用env来共享temp,并使用with_setting装饰器来更改密码和用户 -

from fabric.api import env
from fabric.decorators import with_settings, roles, task

rolesdef = { "server1": ["server.com"],
"server2": ["server2.com", "server3.com"]
}
connection = { "server1": {"user": "user1", "password": "123"},
"server2": {"user": "user2", "password": "456"}
}

@task
@roles('server1')
@with_settings(**connection["server1"])
def first():
  ...do something...
  env.temp = something

@task
@roles('server2')
@with_settings(**connection["server2"])
@parallel
def second():
  ...do something...
  run(env.temp)