我有一本剧本,可以向需要主机名的服务器启动conf。我想将在剧本中定义的主机作为组传递,以便循环jinja2模板中的变量。而且我不想在vars中设置主机(因为已经在剧本中定义了主机,所以我不知道重新定义的原因)
例如: 主机文件:
[test_servers]
t1
t2
t3
[test2_servers]
t2
t4
剧本:
- hosts: test_servers
tasks:
- name: generate my conf
template:
src: templates/temp.conf.j2
dest: "test.conf"
force: True
vars:
hosts: test_servers # So far I need to declare the var here duplicately, I've group my server in host file and I just want to use the current group.
temp.conf
....
{% for host in groups[hosts] %}
Entry.{{ loop.index }} = {{ host }}
{% endfor %}
....
我想知道是否有更好的方法将Playbook中设置的主机传递给jinja2模板,以便我可以将Playbook重复用于其他主机。例如,我只需要将剧本主机重置为test2,而无需重写var。
答案 0 :(得分:1)
没有special variable的群组名称,但是有 ansible_play_hosts_all
该剧所针对的所有主机的列表
删除 vars 并在模板中使用 ansible_play_hosts_all
- hosts: test_servers
tasks:
- name: generate my conf
template:
src: templates/temp.conf.j2
dest: "test.conf"
force: True
{% for host in ansible_play_hosts_all %}
Entry.{{ loop.index }} = {{ host }}
{% endfor %}