我在执行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
答案 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