2016-10-17 316 views
0
私は同じようgroup_varsで定義された変数を使用してJinja2のテンプレートファイルで変数 "ENV" の値を取得しています

Ansible Jinja2の文字列比較

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

env可能三つの値がabcdefxyzである可能性があります。その可能な値私はとdefaults/main.yml内で定義されてきた私は、サーバーのURLを使用する場合は、この値に基づいて

、:Jinja2のテンプレートでは

server_abc: https://xxxx.xxx.com 
server_def: https://xxxxx.xxx.com 
server_xyz: https://xxxx.xxx.com 

は、私がやろうとしています:

{% 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 %} 

envabc,defまたはxyzという値であっても、常にServerURL = "server URL not found"と定義されています。

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

は、だから、構文が真であるが、実行時に "{{env}}"の値が評価されていない私を意味:私はJinja2のテンプレート内のenvを交換しようとした場合、条件がtrueに満足しない以下のような

(ハードコード)。

私はこれを解決するために何ができるでしょうか?

答えて

1

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

{% 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 %} 

そうでなければ、あなたが例abc{{env}}のための2つの文字列を比較して、あなたは常に否定的な結果を得ます。

+0

envからカッコを削除した後でも、サーバのURLが見つからない場合 –

+0

グループ変数の他の変数を使用すると、一致条件で式が真と評価されますが、env変数には同じenv: "{{defined_variable.split( ' - ')[0]}}「 –

+0

私の条件文を とすることで目的を達成できました。もし 'abc' ==ならば % defined_variable.split( ' - ')[0]%} serverURL: '{{server_abc}}' –