Get other group variables

Hello everyone !

I’m digging into Ansible capabilities a bit further, and I’m looking to implement with a beautiful manner the concept of VIP.
To do so, I implemented this variable in the group_vars of my inventory:

group_vars/firstcluster :

`
vips:

  • name: cluster1_vip
    ip : 1.2.3.4
  • name: cluster1.othervip
    ip : 1.2.3.5
    `

group_vars/secondcluster :

`
vips:

  • name: cluster2_vip
    ip : 1.2.4.4
  • name: cluster2.othervip
    ip : 1.2.4.5
    `

and in the inventory :

`
[firstcluster]
node10
node11

[secondcluster]
node20
node21
`

My question : if I want to set up a DNS server, that gathers all the VIP and associated names (without redundancy for esthetism) , how do I proceed ? In short : is it possible to get all group variables notwithstanding the hosts underneath ?

like :

{% for group in <THEMAGICVAR> %} {% for vip in group.vips %} {{ vip.name }} IN A {{ vip.ip }} {% end for %} {% end for %}

Thank you very much !

– Geoff

once the inventory is `compiled` there are not group vars, just host
vars, but you can get it by using any host in the group (as long as
you don't override them per host).

{% for group in <THEMAGICVAR> %}
{% for vip in hostvars[groups[group][0]]['vips'] %}
{{ vip.name }} IN A {{ vip.ip }}
{% end for %}
{% end for %}

You could also create a VIP list in ‘all’ and then reference them in the group_vars:

group_vars/all/vips:

`
all_vips:

  • name: cluster1_vip
    ip : 1.2.3.4
    otherattr: yes
  • name: cluster1_othervip
    ip : 1.2.3.5
    otherattr: yes
  • name: cluster2_vip
    ip : 1.2.4.4
    otherattr: yes
  • name: cluster2_othervip
    ip : 1.2.4.5
    otherattr: yes
    `

group_vars/firstcluster:

`
vips:

  • cluster1_vip
  • cluster1_othervip
    `

group_vars/secondcluster:

`
vips:

  • cluster2_vip
  • cluster2_othervip
    `

templates/zone.j2

`
{% for vip in all_vips %}
{{ vip.name }} IN A {{ vip.ip }}
{% end for %}

`

templates/vips.j2

`
{% for vip_name in vips %}
{% for vip in all_vips|selectattr(“name”, “equalto”, vip_name) %}
virtual server {{ vip.name }} {{ vip.ip }}
{% endfor %}{# vip #}
{% endfor %}{# vip_name #}

`