我想設置一個有效的變量爲某個默認值,但前提是變量未定義。否則,我想保持不變。Ansible:只有在未定義的情況下設置變量
我嘗試這兩種方法都和他們產生遞歸循環:
namespace: "{{namespace|default(default_namespace)}}"
namespace: "{% if namespace is defined %}{{namespace}}{% else %}{{default_namespace}}{% endif %}"
我想設置一個有效的變量爲某個默認值,但前提是變量未定義。否則,我想保持不變。Ansible:只有在未定義的情況下設置變量
我嘗試這兩種方法都和他們產生遞歸循環:
namespace: "{{namespace|default(default_namespace)}}"
namespace: "{% if namespace is defined %}{{namespace}}{% else %}{{default_namespace}}{% endif %}"
好像你正在服用一種錯誤的做法。
查看關於variable precedence的Ansible文檔。如果未定義變量,則Ansible的內置功能將使用默認變量。
在Ansible 2.X變量優先開始是這樣的:
角色默認
庫存瓦爾
所以,如果你要定義一個變量,你應該默認值將其設置爲role/defaults/main.yml
。只有當變量沒有在其他地方定義時,Ansible纔會使用該值。
另一種選擇是使用Jinja2 filter。隨着神社過濾器,你可以像這樣的變量設置一個默認值:
{{ some_variable | default(5) }}
- set_fact: namespace="default_namespace"
when: namespace is undefined
使用Jina2過濾器是否有可能像做 '{{變量| default(other_variable)}}'? – johnsona
這應該工作。你試過了嗎?它工作嗎? –
是的,我認爲我必須嵌套不起作用的大括號。 – johnsona