web-dev-qa-db-ja.com

グループに基づいてAnsibleテンプレートの変数を変更する

私は次のような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 %}

何か案は?

11
Charles Newey

あなたはそれを逆にします。識別子(ホスト名または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
16
t2d

インベントリでansible_fqdn、ansible_hostnameなどのホストが識別されない場合は、group_namesを使用して、現在のホストのグループの1つとして「es-masters」があるかどうかを確認することもできます。

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

https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables を参照してください

6
Maggie

存在しないグループでのエラーを回避するには、最初にグループが存在するかどうかを確認する必要があります。

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