我正试图把头靠近布料。
我们有不同的机器:
+--+ b2b (+config)
+------+ api --+
| +--+ b2c (+config)
|
| +---+ service1 (+config)
| |
| +---+ service2 (+config)
all +---------+ web --+
| +---+ service3 (+config)
| |
| +---+ service4 (+config)
|
|
+------+ db (+config)
从命令行我希望实现这样的目标:
fab -R prod prepare:all
这里-R prod定义用户和目标主机,如下所示:
'prod':
{
'user': 'some_prod_user',
'hosts': ['some_prod_host1', 'some_prod_host2']
}
此映射被视为配置并附加到每个节点。
现在,当我执行此命令时,我希望该节点“全部”调用它的所有子节点,并且它们会调用它们的子节点,直到所有节点都执行任务准备。
fab -R prod prepare:api.b2b
应该只准备b2b节点,仅此而已。
我已经在python(对象层次结构)中构建了整个东西,依此类推。
问题:当每个子类运行它的'prepare'方法时,如何构建整个'env'字典。
根据执行模型,当我到达子类时,整个'env.host_string'已经建立,我无法重新定义它们。
所以这让我思考 - 织物是否适合我?
任何帮助高度赞赏。
欢呼声 烫发
修改
看起来可以尝试类似:
all
prepare.sh
execute.sh
- api
prepare.sh -> calls [b2b|bc2]/prepare.sh
execute.sh -> calls [b2b|bc2]/execute.sh
- b2b
fabfile.py
prepare.sh -> invokes fab
execute.sh -> invokes fab
- b2c
fabfile.py
prepare.sh -> invokes fab
execute.sh -> invokes fab
- web
prepare.sh
execute.sh -> invokes fab
- service1
fabfile.py
prepare.sh -> invokes fab
execute.sh -> invokes fab
- service2
fabfile.py
prepare.sh -> invokes fab
execute.sh -> invokes fab
... you get the idea
现在我可以在顶层调用prepare.sh并将子链级联下来。每个孩子调用所有子模块prepare.sh。我也可以单独调用每个节点。
你觉得怎么样?烫发
答案 0 :(得分:0)
一般情况下,我建议使用单个入口点,以便单个fab
命令行可以执行任何操作。它可能由一组task
和argument
个task
组成,但通常只有一个命令行。
我通常做的是以下内容:
task
task
task
种类的groupings
,即服务,然后调用服务机器的所有task
,切断每个环境之间的环境。通过这种方式,您可以使用单个fab
命令来指定各种组合,因为每个环境和操作本身都是task
,它实际上是{{1}的主要单位工作(实际上只是一个Python函数,有一个框架可以帮助远程执行等)。
Fabric
命令将组合成:fab
等。
我认为,您可以根据我在上面提到的服务之类的fab <env1> <task1> <task2> <env2> <task1> <task2>
种类,将您的层次结构编入概念中。
问题 prepare.sh 和 execute.sh 正在做什么?