Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change variable in Ansible template based on group

I've got an Ansible inventory file a bit like this:

[es-masters]
host1.my-network.com

[es-slaves]
host2.my-network.com
host3.my-network.com

[es:children]
es-masters
es-slaves

I also have a Jinja2 template file that needs a certain value set to "true" if a host belongs to the "es-masters" group.

I'm sure that there's a simple way of doing it but after some Googling and reading the documentation, I've drawn a blank.

I'm looking for something simple and programmatic like this to go in the Jinja2 template:

{% if hostvars[host][group] == "es-masters" %}
node_master=true
{% else %}
node_master=false
{% endif %}

Any ideas?

like image 253
Charles Newey Avatar asked Aug 28 '14 15:08

Charles Newey


2 Answers

You do it the other way around. You check if the identifier (hostname or IP or whatever is in your inventory) is in the defined group. Not if the group is in the hostvars.

{% if ansible_fqdn in groups['es-masters'] %}
node_master=true
{% else %}
node_master=false
{% endif %}

But, what you better should do is this:

Provide default in template

# role_name/templates/template.j2
node_master={{ role_name_node_master | default(true) }}

Than override in group_vars

# group_vars/es-masters.yml
role_name_node_master: false
like image 137
t2d Avatar answered Sep 30 '22 02:09

t2d


To avoid error with non existing group you should check first if the group exists:

{% if 'es-masters' in group_names and ansible_fqdn in groups['es-masters'] %}
node_master=true
{% else %}
node_master=false
{% endif %}
like image 30
panticz Avatar answered Sep 30 '22 02:09

panticz