Hi, 

I am trying to do the following: 

Consul-template needs to generate a haproxy config, the consul template i 
want to be dynamic filled with Ansible. 
The consul template however is a Go template and unfortunately Go uses the 
brackets yaml uses. To be able to build a Go template ansible templates i 
am putting the Go syntax in a variable. 

My whole idea is to place all applications that i want consul to generate 
templates for in a variable file, and let these variables be used in a 
template i generate to generate the Go template for consul.

I got most of it to work, except for the fact that the variable is looping 
over the template instead of within the template. I suspect i need to do it 
all different. 

The task file main.yml: 
---
- include_vars: apps.yml

- name: "Place the Consul Template for haproxy"
  template: src=haproxy.ctmpl.yml dest=/etc/haproxy/haproxy-template.ctmpl 
owner=consul group=consul mode=0644
  with_dict: apps_gen
  when: "'load_balancer' in {{ group_names }}"
 
***



The vars file apps.yml:
---
apps_gen:
  app_bridge:
    name: bridge-webapp
  app_bridge2:
    name: bridge-webapp2
****


The defaults file: 
--- 
consul_template_haproxy: 
  - name: '# Frontend {{ item.value.name }}'
    config: 
       - {{ item.value.name }}_acl

consul_template_backend:
  - name: 'backend {{ item.value.name }}'
    config: 
      - mode http{{'{{'}}range service "{{ item.value.name }}"{{'}}'}}
      - server {{'{{'}}.Node{{'}}'}} 
{{'{{'}}.Address{{'}}'}}:{{'{{'}}.Port{{'}}'}} check{{'{{'}}end{{'}}'}} 
***


The template file haproxy.ctmpl.yml:
---
{% for value in apps_gen %}
  {% for value in consul_template_frontend %}
   {{value.name}}
      {% for config in value.config %}
      {{config}}
      {% endfor %}
  {% endfor %}
{% endfor %}

{% for value in apps_gen %}
  {% for value in consul_template_backend %}
   {{value.name}}
      {% for config in value.config %}
      {{config}}
      {% endfor %}
  {% endfor %}
{% endfor %}
****

The result: 

      # Frontend bridge-webapp
            bridge-webapp_acl
              # Frontend bridge-webapp
            bridge-webapp_acl

     backend bridge-webapp
            mode http {{range service "bridge-webapp"}}
            server {{.Node}} {{.Address}}:{{.Port}} check{{end}}
             backend bridge-webapp
            mode http {{range service "bridge-webapp"}}
            server {{.Node}} {{.Address}}:{{.Port}} check{{end}}

The result i expected: 

     backend bridge-webapp
            mode http {{range service "bridge-webapp"}}
            server {{.Node}} {{.Address}}:{{.Port}} check{{end}}
     backend bridge-webapp2
            mode http {{range service "bridge-webapp2"}}
            server {{.Node}} {{.Address}}:{{.Port}} check{{end}}

What i see is that the loop is going over the template when i run the 
playbook, while i expected it to be within the template: 

changed: [loadbalancer] => (item={'key': 'app_bridge2', 'value': {'name': 
'bridge-webapp2'}}) => {"changed": true... 
changed: [loadbalancer] => (item={'key': 'app_bridge', 'value': {'name': 
'bridge-webapp'}}) => {"changed": true...

Can anyone help me? Im a bit lost, i really appreciate any help! I am 
currently thinking about registering the results and use that as a variable 
in the template, but it feels like im starting to play the lead role in 
Inception. This does not help readability

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/5e692848-eaf0-4493-8010-ec8405055ebb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to