假设我在命令行中有test.yml和变量:packages来指定需要运行哪个yml,test.yml如下:
- include: "{{item}}.yml"
with_items:
- a
- a_a
- b
- c
when: "'{{item}}' in packages"
loop_control:
loop_var: item
似乎在ansible检查条件"' {{item}}'在包裹"它是使用喜欢但不平等。例如如果我跑:
ansible-playbook -i hosts -e hosts=myhost test.yml -e packages = [a_a, b]
Anisible也会运行a_a.yml,b.yml和a.yml(不想运行a.yml)。我怎么能改变ansible检查条件来修复它的方式(更改名称不是一种可持续的方式)?
答案 0 :(得分:0)
首先:不要在when
语句中使用大括号 - 它已经是Jinja2表达式。
when: item in packages
第二:in
运算符检查一个列表(item)是另一个列表的一部分,并且因为Python中的字符串可以被视为列表,in
运算符通常用于检查字符串中的模式比如:'pattern' in str_var
。
第三:-e
的{{1}}参数接受两种形式的值:ansible-playbook
和key=value
,并在docs中有关于此的注释:
注意强>
使用key = value语法传入的值被解释为字符串。如果您需要传入任何不应该是字符串的内容(布尔值,整数,浮点数,列表等),请使用JSON格式。
将所有这些组合在一起,你应该修复你的when语句并将额外的变量作为JSON传递:
JSON