ansible 循环条件,在选中列表中的项目时喜欢而不是等于



假设我在命令行中有一个test.yml和一个变量:包来指定哪个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 检查条件以修复它的方式(更改名称不是一种可持续的方式(?

首先:不要在语句中使用大括号when——它已经是 Jinja2 表达式了。

when: item in packages

第二:in运算符检查一个列表(item(是否是另一个列表的一部分,并且由于Python中的字符串可能被视为列表,因此in运算符通常用于检查字符串中的模式,例如:'pattern' in str_var

第三:-eansible-playbook的参数接受两种形式的值:key=valueJSON,文档中有一个关于这一点的说明:

注意
使用 key=value 语法传入的值被解释为字符串。如果您需要传入任何不应该是字符串的内容(布尔值、整数、浮点数、列表等(,请使用 JSON 格式。

将所有这些组合在一起,您应该修复 when 语句并将额外的变量作为 JSON 传递:

-e '{"packages":["a_a","b"]}'

最新更新