I wonder if there might be a simpler way to approach this, but you could
use a trick I have used a couple of times and use a template to generate a
yaml data structure. Something like:
backend_servers.j2:
---
{% for x in groups['web_servers'] %}
- name: {{ x }}
ip: {{ hostvars[x]['ansible_eth0']['ipv4']['address'] }}
port: 8080
params: blargh
{% endfor %}
Now, you can load this in the playbook like this:
- name: set the fact
set_fact:
backend_servers: "{{ lookup('template', 'backend_servers.j2')|from_yaml
}}"
(Note that you need to use the "complex arguments" form and not the
"set_fact: key=value" form, otherwise you will end up with a string and not
a dict.)
This seems a little convoluted to me--and I don't fully understand why you
couldn't simply template the haproxy.cfg file and just push the logic for
the servers into the template, but I've used this pattern a couple of times
when a simpler solution was not available.
-Tim
On Fri, Dec 19, 2014 at 9:16 PM, Rick Kasten <[email protected]> wrote:
>
> I have to create a haproxy config file with data from an unknown number of
> backend servers. The number is unknown, because based on the environment I
> need to run the playbook in, the number of backend servers could be 1 to
> several. My backend servers in haproxy.cfg need to defined something like
> this:
>
> backend backend_nodes
> description Web Servers
> balance roundrobin
> server web01 10.0.2.1:8080 check
> server web02 10.0.2.3:8080 check
> server web03 10.0.2.3:8080 check
>
> So on any given run of the playbook, I need to define the dict
> 'backend_servers' for X items (to generate the server lines above):
>
> - name: <server_name>
> ip: <server_IP>
> port: <http_port>
> params: <params>
>
> With that block repeated for every server in groups['web_servers']. I
> tried using set_facts, but that can't define dict types. I have to do this
> as a dict, because different inventories will have different numbers of
> hosts in groups['web_servers'], and I can't hard-code this into my playbook
> or template, because the playbook will be used to configure different
> haproxy roles with different parameters, so this role needs to remain
> generic.
>
> --
> 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 [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/95c5422a-e604-4742-b282-0dc9c8265117%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/95c5422a-e604-4742-b282-0dc9c8265117%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
--
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/CAH4wdVWVFG_zMZ_yE_YX%3DU8zEcPk9-sbS-vqHXCubowaouD2Xw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.