ansible循环条件,在列表中检查项目时确实喜欢而不是相等

时间:2017-08-03 22:06:54

标签: ansible

假设我在命令行中有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检查条件来修复它的方式(更改名称不是一种可持续的方式)?

1 个答案:

答案 0 :(得分:0)

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

when: item in packages

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

第三:-e的{​​{1}}参数接受两种形式的值:ansible-playbookkey=value,并在docs中有关于此的注释:

  

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

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

JSON