2017-10-10 48 views
0

這些變量是通過從YAML文件加載它們作爲extra_args傳遞的。 我曾嘗試以下,但它不工作:如果變量包含布爾值,我如何在Ansible中失敗任務?我想爲Ansible的手冊執行輸入驗證

- name: Check if variable are of type boolean 
    fail: 
    msg: "Variable '{{ item }}' is not a boolean" 
    when: item is not bool 
    with_items: "{{ required_boolean_vars }}" 

而且,類似於布爾值,我怎麼能這樣做的整數,字典和對象類型相同。

+0

什麼是「對象」類型? – techraf

回答

0

有一種普遍的type_debug filter它返回類型,因此對於布爾條件爲:

when: "item | type_debug == 'bool'"` 

的另一種方法:

when: item is sameas true or item is sameas false 

對於詞典:

when: item is mapping 

對於清單:

when: item is iterable 

此外,上述條件檢查item爲是布爾,你在標題問道。添加not如果你想考對面爲您的代碼表明...

+0

有趣的是,你可以測試什麼時候一個項目不是字符串,但不是當一個項目不bool時... –

+0

我測試了布爾,布爾,布爾......沒有一個是有效的。這工作。謝謝@techraf,幹得不錯。 –

0

一種解決方法,我發現失敗的任務,如果不是boolean類型變量是

- name: Check if variable are of type boolean 
    assert: 
    that: "{{ item }} == false or {{ item }} == true" 
    msg: "Variable {{ item }} is not of type boolean" 
    with_items: "{{ required_boolean_vars }}" 

其中required_boolean_vars包含的變量列表我想檢查。

+1

'that:'是一個Jinja2表達式本身,不要在裏面使用大括號。 –

相關問題