私は次のようなAnsibleインベントリファイルを持っています:
[es-masters]
Host1.my-network.com
[es-slaves]
Host2.my-network.com
Host3.my-network.com
[es:children]
es-masters
es-slaves
ホストが「es-masters」グループに属している場合、特定の値を「true」に設定する必要があるJinja2テンプレートファイルもあります。
簡単な方法があると確信していますが、グーグルでドキュメントを読んだ後、空白を描きました。
Jinja2テンプレートに入れるために、次のようなシンプルでプログラム的なものを探しています。
{% if hostvars[Host][group] == "es-masters" %}
node_master=true
{% else %}
node_master=false
{% endif %}
何か案は?
あなたはそれを逆にします。識別子(ホスト名またはIP、またはインベントリにあるもの)が定義されたグループにあるかどうかを確認します。グループがhostvarsにある場合はそうではありません。
{% if ansible_fqdn in groups['es-masters'] %}
node_master=true
{% else %}
node_master=false
{% endif %}
テンプレートにデフォルトを提供する
# 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
を使用して、現在のホストのグループの1つとして「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 %}