web-dev-qa-db-ja.com

Ansible Jinja2文字列比較

次のようにgroup_varsで定義された変数を使用して、Jinja2テンプレートファイルの変数「env」の値を取得しています。

env: "{{ defined_variable.split('-')[0] }}"

env可能な3つの値は、abcdefxyzです。

この値に基づいて、サーバーの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 %}

ただし、envabcdefまたはxyzの値が含まれている場合でも、常にServerURL = "server URL not found"を定義することになります。

以下のようにJinja2テンプレート(ハードコード)のenvを置き換えようとした場合、条件はtrueを満たします。

     {% if 'abc'  == "abc" %}
     serverURL: '{{ server_abc }}' 

つまり、構文は真ですが、実行時の"{{env}}"の値は評価されません。

これを解決するにはどうすればよいですか?

5

式内の変数を参照するのに引用符や中括弧は必要ありません。正しい構文は次のとおりです。

{% 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}}そしてあなたは常に否定的な結果を得る。

18
techraf