2017-07-11 28 views
0

Ansible 1.9.4Ansible with_dict預計的字典 - 空白空字典變量

在我group_vars/slave/slave文件,我有以下變量設置爲NULL值(/未定義無/空字符串更準確):

# NFS mount settings 
slave_nfsmount: 

劇本調用任務/動作:

- name: Ensure nfs mount directory exists 
    file: path={{item.key}} state=directory 
    with_dict: "{{slave_nfsmount | default({})}}" 
    ignore_errors: yes 

得到一個錯誤MESG:

TASK: [Ensure nfs mount directory exists] ************************************** 
fatal: [12.19.22.33] => with_dict expects a dict 

FATAL: all hosts have already failed -- aborting 

要設置在global_vars /從/從文件slave_nfsmount變量的值(用戶可以通過在命令行中這個值或者可以提供取決於什麼其他方式用戶想要在運行時傳遞或不傳遞)。因爲目前它使用NULL,空白/無值爲slave_nfsmount變量,我使用"{{ slave_nfsmount | default({})}}"with_dict:語句。

如何使這項工作當值爲空/空/未定義/空,以便我的手冊不會失敗?

我試着給:and slave_nfsmount is not defined

ignore_errors: yesTrue),但它沒有工作,如上圖所示仍然以致命錯誤而失敗的劇本。

+0

同意@techraf,但問題仍然是有效的: ) –

回答

1

default()過濾器只有在VAR是不確定返回默認值。

http://jinja.pocoo.org/docs/2.9/templates/#default

如果值是不確定的,它將返回傳遞默認值,變量,否則值:

在你的情況,slave_nfsmount的定義,它是NULL。

如果你想通過VAR額外瓦爾(即-e參數)被覆蓋,給它在當時是一個默認值初始化它:

slave_nfsmount: {} 
+0

實際上是有道理的(與我的問題有關)。仍然想知道,如果這能解決這個問題,那很好,但爲什麼'ignore_errors:yes'或'ignore_errors:True'不會忽略/跳過錯誤。 –

+1

因爲它就像語法/編譯錯誤(無法解析對變量的引用),但不是由任務本身產生的錯誤。 –

1

我有以下變量設置爲NULL值(無/未定義)

不,你沒有。你有一個定義的變量。

使用例如三元過濾器。

with_dict: "{{slave_nfsmount | ternary(slave_nfsmount, {})}}" 
+1

不,值爲NULL。 –

+0

這個答案也是一個很好的嘗試。 –