如何使用Ansible在主机之间循环并同时设置变量
我试图简化部署HA Zookeeper集群的Ansible剧本(3个实例)。因为我需要为每个实例分别设置Zookeeper ID,所以现在看起来像这样(摘录): 现在,我认为应该可以在某种程度上以循环的方式来实现这一点。以下是我想要的一些伪代码:如何使用Ansible在主机之间循环并同时设置变量,ansible,Ansible,我试图简化部署HA Zookeeper集群的Ansible剧本(3个实例)。因为我需要为每个实例分别设置Zookeeper ID,所以现在看起来像这样(摘录): 现在,我认为应该可以在某种程度上以循环的方式来实现这一点。以下是我想要的一些伪代码: - for i in (1,2,3): hosts: "zoo{{ i }}" tasks: - include tasks/install-zookeeper.yml ID="{{ i }}"
- for i in (1,2,3):
hosts: "zoo{{ i }}"
tasks:
- include tasks/install-zookeeper.yml ID="{{ i }}"
这样做可能吗?将每个主机的
ID
var放入您的库存中。这可以直接在清单文件中完成,也可以在host\u vars/YouHostInventoryName.yml
文件中完成。有关这方面的更多信息,请参阅
对于本例,我们可以使用基本静态yaml库存:
---
全部:
主持人:
zoo1:
身份证号码:1
动物园2:
身份证号码:2
zoo3:
身份证号码:3
现在您只需调用每个主机上的include,它将自动从库存中获取正确的ID
:
-主机:所有
任务:
-包括任务:tasks/install-zookeeper.yml
注意:仍受支持,但在不久的将来将不推荐使用。您应该转到新的。
,如上述链接文档的注释所述。相当于
- for i in (1,2,3):
hosts: "zoo{{ i }}"
tasks:
- include tasks/install-zookeeper.yml ID="{{ i }}"
可以通过下面的清单和剧本来实现
shell>cat主机
[组别1]
zoo1
动物园2
zoo3
shell>cat playbook.yml
-主持人:cluster1
任务:
-包括_任务:install-zookeeper.yml
变量:
ID:“{inventory_hostname[3:0]}”
下一个选项是使用主机名中以数字开头的部分。例如
vars:
ID:“{{inventory\u主机名|
regex_replace(“^(\\D*)(.*)$”,“\\2')}”
可以动态更改库存。比如说,
shell>cat playbook.yml
-主机:本地主机
任务:
-添加\u主机:
名称:“动物园{{item+1}}”
组别:cluster1
循环:{range(0,没有服务器|默认值(3)| int)| list}}
-主持人:cluster1
任务:
-调试:
msg:“{{inventory\u主机名|
regex_replace(“^(\\D*)(.*)$”,“\\2')}”
给予
shell>ansible playbook playbook.yml-e“服务器数量=2”
确定:[缩放1]=>
味精:“1”
确定:[缩放2]=>
味精:“2”
政策是什么?似乎ID
可能是组列表中的索引。换句话说,将ID
分配给主机的规则是什么?或者,可能有一个host:ID
hash的字典。这是什么?政策只是每个服务都有唯一的ID。它不需要缩放,所以我用了最简单的方法,只要我觉得合适就给它们添加刚性ID。您的答案中的解决方案可能更适合动态部署,只需稍作更改,因此我稍后可能会切换到该方法。
- for i in (1,2,3):
hosts: "zoo{{ i }}"
tasks:
- include tasks/install-zookeeper.yml ID="{{ i }}"