在我的fabric脚本中,我遇到以下问题。我有一个称为autodeploy的主要任务。在这个任务中,我有一些任务,我只想在本地运行一次。所有远程任务应该在主机列表的每个主机上运行。如何让一些Fabric任务只在本地运行一次,而其他Fabric任务在所有主机上运行
env.roledefs ={
'testing': ['t-server-01', 't-server-02']
'staging': ['s-server-01', 's-server-02']
'live': ['l-server-01', 'l-server-02']
}
def localtask1():
# download artifact
def localtask2():
# cleanup locally
def remotetask():
# deploy artifact to all hosts
def autodeploy():
localtask1() # run this task only once, locally
remotetask() # run this task on all hosts
localtask2() # run this task only once
该通话如下。我想将角色作为属性传递给角色。
fab -R test autodeploy
我改变了代码在上面的问题,所以你可以看到我的尝试。也许我错过了一些事情,因为它似乎没有工作 –
你做了倒退。执行(remotetask)是你真正需要的。我会编辑我的答案,使其更清楚。 – Morgan
因为我想将角色作为属性传递,所以我没有看到此解决方案适用于我。如果我把@roles('testing')放在一个任务上面,它会一直运行这个任务,并且相应的宿主列表 –