次のようにgroup_varsで定義された変数を使用して、Jinja2テンプレートファイルの変数「env」の値を取得しています。
env: "{{ defined_variable.split('-')[0] }}"
env
可能な3つの値は、abc
、def
、xyz
です。
この値に基づいて、サーバーのURLを使用します。その可能な値は、defaults/main.yml
内で次のように定義しています。
server_abc: https://xxxx.xxx.com
server_def: https://xxxxx.xxx.com
server_xyz: https://xxxx.xxx.com
Jinja2テンプレートで、私はやろうとしている:
{% if 'abc' == "{{env}}" %}
serverURL: '{{ server_abc }}'
{% Elif 'def' == "{{env}}" %}
serverURL: '{{ server_def}}'
{% Elif 'xyz' == "{{env}}" %}
serverURL: '{{ server_xyz }}'
{% else %}
ServerURL: 'server Url not found'
{% endif %}
ただし、env
にabc
、def
またはxyz
の値が含まれている場合でも、常にServerURL = "server URL not found"
を定義することになります。
以下のようにJinja2テンプレート(ハードコード)のenvを置き換えようとした場合、条件はtrueを満たします。
{% if 'abc' == "abc" %}
serverURL: '{{ server_abc }}'
つまり、構文は真ですが、実行時の"{{env}}"
の値は評価されません。
これを解決するにはどうすればよいですか?
式内の変数を参照するのに引用符や中括弧は必要ありません。正しい構文は次のとおりです。
{% if 'abc' == env %}
serverURL: '{{ server_abc }}'
{% Elif 'def' == env %}
serverURL: '{{ server_def }}'
{% Elif 'xyz' == env %}
serverURL: '{{ server_xyz }}'
{% else %}
ServerURL: 'server URL not found'
{% endif %}
それ以外の場合は、2つの文字列を比較します(例:abc
と{{env}}
そしてあなたは常に否定的な結果を得る。