Изменение переменной в 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 %}
чтобы избежать ошибки с несуществующей группой, вы должны сначала проверить, существует ли группа:
{% if 'es-masters' in group_names and ansible_fqdn in groups['es-masters'] %}
node_master=true
{% else %}
node_master=false
{% endif %}