如何使用我的剧本中的主机启动模板

时间:2019-06-13 05:31:31

标签: ansible

我有一本剧本,可以向需要主机名的服务器启动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。

1 个答案:

答案 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 %}