Ansible:如何通过主机组中的索引号获取主机

时间:2019-03-26 03:49:00

标签: ansible

清单中有此主机组

[test-node]
usprz3-sec-asept-dz03.prz.foo.com
usprz3-sec-asept-dz04.prz.foo.com

我想通过.j2模板在文件中打印这些主机名 我不想遍历列表,我只想在一个位置打印组中的第一项,而在另一位置打印第二项。是否有类似下面的方法可以给我想要的效果?

[test-node].0    should print usprz3-sec-asept-dz03.prz.foo.com
[test-node].1    usprz3-sec-asept-dz04.prz.foo.com

我的ansible版本是ansible 2.5.4

谢谢。

2 个答案:

答案 0 :(得分:1)

Special Variables中提供了组和主机的列表。

下的任务
- template:
    src: test-template.j2
    dest: test.txt

和模板(test-template.j2)

{% for item in groups['test-node'] %}
[test-node].{{loop.index}}    {{ item }}
{% endfor %}

给予:

> cat test.txt
[test-node].1    usprz3-sec-asept-dz03.prz.foo.com
[test-node].2    usprz3-sec-asept-dz04.prz.foo.com

答案 1 :(得分:1)

以弗拉基米尔的例子为例,您可以将列表中的第一台主机打印为

function(b)

这将打印usprz3-sec-asept-dz03.prz.foo.com

,第二个主机为

{{ groups['test-node'].0 }}

这将打印usprz3-sec-asept-dz04.prz.foo.com