2016-10-17 26 views
0

我正在使用group_vars這樣定義一個變量在Jinja2的模板文件中獲取變量 「ENV」 的價值:Ansible Jinja2的字符串比較

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

env可能的三個值可能是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 %} 

但是,即使env的值爲abcdefxyz,它總是結束定義ServerURL = "server URL not found"

如果我試圖替換Jinja2的模板ENV(硬編碼),如下面的條件並不滿足於真:

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

所以這意味着我的語法是正確的,但的"{{env}}"在運行時的值未評估。

任何建議我能做些什麼來解決這個問題?

回答

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}},你總是得到陰性結果。

+0

即使在從env中移除大括號之後,它仍然在服務器URL上找不到結果 –

+0

如果我使用組vars中的任何其他變量,表達式在匹配條件下的計算結果爲true,但env變量的填充方式相同jinja teamplate文件的表達式爲: - env:「{{defined_variable.split(' - ')[0]}}」 –

+0

如果'abc'==我可以通過將條件語句作爲 來達到目的if %== defined_variable.split(' - ')[0]%} serverURL:'{{server_abc}}' –