2016-01-29 54 views
12

我想設置一個有效的變量爲某個默認值,但前提是變量未定義。否則,我想保持不變。Ansible:只有在未定義的情況下設置變量

我嘗試這兩種方法都和他們產生遞歸循環:

namespace: "{{namespace|default(default_namespace)}}" 
namespace: "{% if namespace is defined %}{{namespace}}{% else %}{{default_namespace}}{% endif %}" 

回答

18

好像你正在服用一種錯誤的做法。

查看關於variable precedence的Ansible文檔。如果未定義變量,則Ansible的內置功能將使用默認變量。

在Ansible 2.X變量優先開始是這樣的:

角色默認

庫存瓦爾

所以,如果你要定義一個變量,你應該默認值將其設置爲role/defaults/main.yml。只有當變量沒有在其他地方定義時,Ansible纔會使用該值。

另一種選擇是使用Jinja2 filter。隨着神社過濾器,你可以像這樣的變量設置一個默認值:

{{ some_variable | default(5) }} 
+1

使用Jina2過濾器是否有可能像做 '{{變量| default(other_variable)}}'? – johnsona

+1

這應該工作。你試過了嗎?它工作嗎? –

+2

是的,我認爲我必須嵌套不起作用的大括號。 – johnsona

10
- set_fact: namespace="default_namespace" 
    when: namespace is undefined 
相關問題