gpt4 book ai didi

ansible - 如何在ansible中枚举主机?

转载 作者:行者123 更新时间:2023-12-01 08:47:23 26 4
gpt4 key购买 nike

我是使用 Ansible 并使用它来自动配置主从节点集群的新手。

我有一个主机文件分为两组:

[master]
masternode

[slaves]
slavenode0
slavenode1

我想要的是遍历从属组,以便使用从属组中的位置索引更新远程机器上文件中的一行。

当我尝试使用“with_items”或“with_indexed_items”执行此操作时,问题是文件在从属组中的每台机器上得到更新,对应于从属组中的从属节点数量。这意味着每个从节点上的每个文件最终都插入了完全相同的行,只是该文件被更新了 x 次。

所以我想要:
| slave node | filename | line in file     |
| slave0 | test | slave index is 0 |
| slave1 | test | slave index is 1 |

我得到的是:
| slave node | filename | line in file     |
| slave0 | test | slave index is 1 |
| slave1 | test | slave index is 1 |

有没有办法做到这一点?

最佳答案

编辑
重新阅读您的问题后,我想我误解了它。

获取 的索引当前 list 组中的主机,您可以使用 index组列表中的方法。

{{groups['slaves'].index(inventory_hostname)}}

例子
- lineinfile:
path: ~/test
line: "slave index is {{groups['slaves'].index(inventory_hostname)}}"



原答案
如果您使用 jinja2带有 ansible 的模板,您可以访问 for loop 中的索引与 {{loop.index}} .

从属配置的示例模板可能如下所示
| slave node | filename | line in file |
{% for slave in groups['slaves'] %}
| {{slave}} | test | slave index is {{loop.index}} |
{% endfor %}

这应该有所需的输出
| slave node | filename | line in file |
| slavenode0 | test | slave index is 1 |
| slavenode1 | test | slave index is 2 |

要在你的剧本中使用它,你可以使用 ansible template模块。
tasks:
- name: master slave configuration
template: src=slave.conf.j2 dest=/etx/slave.conf

关于ansible - 如何在ansible中枚举主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50445356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com