2017-08-03 42 views
0

假設我有test.yml和變量:包在命令行指定陽明需要運行,test.yml是如下:ansible循環條件,不喜歡的,而不是平等的,當在一個列表檢查項目

- include: "{{item}}.yml" 
    with_items: 
    - a 
    - a_a 
    - b 
    - c 
    when: "'{{item}}' in packages" 
    loop_control: 
    loop_var: item 

它似乎在安全地檢查包中的條件「'{{item}}」時,它使用的是like但不相等。例如如果我運行:

ansible-playbook -i hosts -e hosts=myhost test.yml -e packages = [a_a, b] 

Anisible將運行a_a.yml,b.yml和a.yml以及(不想a.yml運行)。我怎麼能改變方式檢查條件來修復它(改變名稱不是一種可持續的方式)?

+0

有標籤和角色Ansible已經實施了這樣的用例。爲什麼你需要發明解決不存在的問題的解決方法? – techraf

回答

0

第一:不要在when聲明中使用大括號 - 它已經是Jinja2表達式。

when: item in packages 

第二:in操作者檢查的一個列表(項)是另一個列表的一部分,並且因爲在Python串可以作爲列表被處理,in操作者經常使用在像字符串檢查圖案:'pattern' in str_var

三:-e論據ansible-playbook接受兩種形式的值:key=valueJSON,有這個在docs一張紙條:

注意
值在使用鍵=值傳遞語法被解釋爲字符串。如果您需要傳遞不應該是字符串的任何內容(布爾值,整數,浮點數,列表等),請使用JSON格式。

結合這一切在一起,你應該解決您的發言時,並通過額外的增值經銷商爲JSON:

-e '{"packages":["a_a","b"]}' 
相關問題