Aes*_*sir 3 ansible ansible-2.x
我刚接触Ansible,并使用它来自动配置主从节点群集。
我有一个主机文件分为两个组:
[master]
masternode
[slaves]
slavenode0
slavenode1
Run Code Online (Sandbox Code Playgroud)
我要遍历slaves组,以便用slaves组中位置的索引更新远程计算机上文件中的一行。
当我尝试使用'with_items'或'with_indexed_items'进行此操作时,问题是该文件在slaves组中的每台计算机上都进行了更新,这与slaves组中slavenodes的数量相对应。这意味着每个从节点上的每个文件最终都会插入完全相同的行,只是该文件已更新x次。
所以我想要:
| slave node | filename | line in file |
| slave0 | test | slave index is 0 |
| slave1 | test | slave index is 1 |
Run Code Online (Sandbox Code Playgroud)
我得到的是:
| slave node | filename | line in file |
| slave0 | test | slave index is 1 |
| slave1 | test | slave index is 1 |
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
编辑
重新阅读您的问题后,我认为我误会了它。
要获取清单组中当前主机的索引,可以使用index组列表中的方法。
{{groups['slaves'].index(inventory_hostname)}}
Run Code Online (Sandbox Code Playgroud)
例
- lineinfile:
path: ~/test
line: "slave index is {{groups['slaves'].index(inventory_hostname)}}"
Run Code Online (Sandbox Code Playgroud)
原来的答案
如果您使用Jinja2的模板和ansible您可以访问该指数在for循环使用{{loop.index}}。
从属配置的示例模板如下所示
| slave node | filename | line in file |
{% for slave in groups['slaves'] %}
| {{slave}} | test | slave index is {{loop.index}} |
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
这应该具有所需的输出
| slave node | filename | line in file |
| slavenode0 | test | slave index is 1 |
| slavenode1 | test | slave index is 2 |
Run Code Online (Sandbox Code Playgroud)
要在您的剧本中使用此功能,请使用ansible 模板模块。
tasks:
- name: master slave configuration
template: src=slave.conf.j2 dest=/etx/slave.conf
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1760 次 |
| 最近记录: |