对于fabric 1.x,我有一个类似的fabfile:
from fabric.api import env
def prod():
env.hosts += ['1.2.3.4']
def integ():
env.hosts += ['2.3.4.5']
def doit():
env.user = 'root'
- do some stuff here -
通过这种方式,我可以指定目标:执行doit()进行集成,我可以做到:
fab integ doit
对于集成和生产,我可以做到:
fab integ prod doit
使用fabric2,我看不到更多的api,而必须使用Connection对象,但是,我看不到可以在哪里更改当前的SerialGroup来动态添加一些主机。
如何将此代码移植到fabric2?
答案 0 :(得分:0)
调试之后,我发现对每个主机的所有“调用”对象在执行之前都已创建:不能在任务中修改主机列表,游戏已经设置好了。 不过,我找到了一种解决方法,可以执行以下操作:
rewrite-uri
通过这种方式,现在可以执行以下操作之一:
from fabric import task, SerialGroup
hosts_to_process = []
@task
def prod(c):
global hosts_to_process
hosts_to_process += ['1.2.3.4']
@task
def integ(c):
global hosts_to_process
hosts_to_process += ['2.3.4.5']
@task
def doit(c):
if not hasattr(c,'host'):
group = SerialGroup(*hosts_to_process)
for c in group:
doit(c)
else:
env.user = 'root'
- do some stuff here -