Jinja2在Ansible Playbook中

时间:2014-10-21 11:48:26

标签: ansible ansible-playbook

我怎样才能在收集的事实中循环使用ansible playbook? 我试过了:

...  
haproxy_backends:
  - name: 'backend'
    servers:
      {% for host in groups['app-servers'] %}
        - name: "{{ hostvars[host]['ansible_hostname'] }}"
          ip: "{{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}"
      {% endfor %}

但这不起作用,会导致语法错误。甚至可以在剧本中使用jinja吗?

我使用ansible galaxy角色(info.haproxy),我不想更改提供的模板。

1 个答案:

答案 0 :(得分:2)

不,你不能这样做。

这必须在模板中完成,例如:

template / haproxy.cfg.j2:

...
{% for host in groups['app-servers'] %}
backend {{ hostvars[host]['ansible_hostname'] }}
  server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}:1234 check inter 5000 slowstart 2m

{% endfor %}
...

并使用:

tasks:
  - name: Deploy haproxy config
    template: src=templatepath/haproxy.cfg.j2 dest=/etc/haproxy/haproxy.cfg

你明白了,YMMV。

祝你好运。