Juri Glass
Juri Glass

Reputation: 91493

Jinja2 in Ansible Playbook

how can i loop in an ansible playbook over gathered facts? I tried:

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

But this doesn't work, it results in a Syntax Error. Is it even possible to use jinja in a playbook?

I use a ansible galaxy role (info.haproxy) and i don't want to change the provided templates.

Upvotes: 4

Views: 4538

Answers (1)

leucos
leucos

Reputation: 18269

No you can't do this.

This has to be done in a template, something like :

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 %}
...

and use :

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

You get the idea, YMMV.

Good luck.

Upvotes: 3

Related Questions