Fabric - 可以在一个方法中执行本地和远程任务吗?

时间:2015-09-24 12:06:22

标签: python fabric

是否可以在同一任务方法中执行本地和远程任务?

例如,我想做类似以下的事情:

@fabric.api.task
def Deploy():
    PrepareDeploy()
    PushDeploy()
    execute(Extract())
    execute(Start())

PrepareDeployPushDeploy是本地任务(仅通过fabric.api.local()方法在本地执行):

@fabric.api.task
@fabric.decorators.runs_once
def PrepareDeploy():

@fabric.api.task
@fabric.decorators.runs_once
def PushDeploy():

Extract / Start是应该在远程主机上运行的方法:

@fabric.api.task
def Extract():

@fabric.api.task
def Start():

然而,当我尝试fab Deploy时,我会得到类似的结果:

[remote1.serv.com] Executing task 'Deploy'
[localhost] local: find . -name "*.java" > sources.txt
 ...

第一行对我来说似乎不对(实际上会导致错误)。

1 个答案:

答案 0 :(得分:0)

您可以生成新任务并定义应运行的主机,例如 - 如何创建所有主机的rabbitmq,并使用相同的erlang cookie配置puppet。

参见第114行 - 特定主机上的任务执行。

https://gist.github.com/nvtkaszpir/17d2e2180771abd93c46

我希望这会有所帮助。