Изменение переменной в Ansible шаблоне на основе группы

у меня есть файл Ansible inventory немного похожий на этот:

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

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

[es:children]
es-masters
es-slaves

у меня также есть файл шаблона Jinja2, который требует определенного значения "true", если хост принадлежит к группе" es-masters".

Я уверен, что есть простой способ сделать это, но после некоторого гугления и чтения документации я нарисовал пробел.

Я ищу что-то простое и программное, как это, чтобы пойти в шаблоне Jinja2:

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

любой идеи?

3 ответов


вы делаете это наоборот. Вы проверяете, находится ли идентификатор (имя хоста или IP или что-то еще в вашем инвентаре) в определенной группе. Нет, если группа находится в hostvars.

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

но, что вам лучше сделать, так это:

укажите значение по умолчанию в template

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

чем переопределить в group_vars

# group_vars/es-masters.yml
role_name_node_master: false

Если ваш инвентарь не идентифицирует хосты с ansible_fqdn, ansible_hostname и т. д. вы также можете использовать group_names чтобы проверить, имеет ли текущий хост "ES-masters" в качестве одной из его групп.

{% if 'es-masters' in group_names %}
node_master=true
{% else %}
node_master=false
{% endif %}

см http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts - ...


чтобы избежать ошибки с несуществующей группой, вы должны сначала проверить, существует ли группа:

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