14

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

ただし、 、またはの値が付いていServerURL = "server URL not found"ても、常に定義されてしまいます。envabcdefxyz

以下の条件のように、Jinja2 テンプレート (ハードコード) の env を置き換えようとすると、true になります。

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

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

これを解決するために何ができますか?

4

1 に答える 1

39

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

{% 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、and{{env}}と、常に否定的な結果が得られます。

于 2016-10-17T13:03:59.933 に答える