2017-08-03 40 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"]}'