Ansible:带有“ and”和布尔变量的条件不起作用

时间:2018-08-20 11:59:49

标签: ansible

我在执行ansible-playbook时发现了以下问题:

我有一个include_tasks:命令,该命令取决于2个变量,即字符串变量和布尔变量。

我首先尝试编写这样的代码,我认为应该可以正常工作:

- include_tasks: file.yml
  when: string_variable == "string" and bool_variable

不幸的是,那没用,即使bool_variable设置为false也包含了任务。变量在hosts文件夹中的清单文件中定义:

[group]
server1      bool_variable=false       string_variable=string
server2      bool_variable=false       string_variable=string

file.yml中,有以下几行:

- debug:
    var: bool_variable

为每个服务器打印false。但是,当变量为false时,不应到达此行。

但是,我发现了使该条件起作用的两种方法:

添加== true,这显然是多余的,因为条件不包含false == true

- include_tasks: file.yml
  when: string_variable == "string" and bool_variable == true

这(表明应该正确解释bool_variable):

- include_tasks: file.yml
  when: 
    - string_variable == "string" 
    - bool_variable

为什么第一个条件不起作用?据我所知,该病应该得到正确评估。我必须添加括号或类似内容吗?

我正在使用ansible 2.6.3

2 个答案:

答案 0 :(得分:4)

您在INI格式清单中设置的任何变量,或者由于Extravars是字符串而从CLI传递的变量。

您可以使用type_debug过滤器进行验证:

bool_variable | type_debug

在Python 2上运行Ansible时,类型为unicode;在Python 3上运行时,类型为str


使用以下内容将其转换为条件中的布尔值:

bool_variable | bool

某些表达式起作用,因为Ansible尝试将字符串值与常见的(在YAML中定义的)布尔值匹配。

答案 1 :(得分:0)

可以试试这个,如果只有布尔参数

when: STRING_PARAM|bool == true

当字符串参数为 false 时

when: STRING_PARAMETER == "PRODUCER" and BOOLEAN_PARAM|bool == false