Ansible:带“的条件;及;和布尔变量不起作用
我在执行ansible剧本时发现以下问题: 我有一个Ansible:带“的条件;及;和布尔变量不起作用,ansible,Ansible,我在执行ansible剧本时发现以下问题: 我有一个include\u tasks:命令,它依赖于两个变量,一个字符串变量和一个布尔变量 我首先尝试这样编写代码,我认为应该可以很好地工作: - include_tasks: file.yml when: string_variable == "string" and bool_variable 不幸的是,这不起作用,即使bool_variable设置为false,任务也包括在内。变量在hosts-文件夹的清单文件中定义: [group] s
include\u tasks:
命令,它依赖于两个变量,一个字符串变量和一个布尔变量
我首先尝试这样编写代码,我认为应该可以很好地工作:
- 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
,这显然是多余的,因为条件than包含false==true
:
- include_tasks: file.yml
when: string_variable == "string" and bool_variable == true
这表明bool_变量
应该被正确解释:
为什么第一个条件不起作用?据我所知,应该正确评估条件。我必须添加亲子关系或类似的东西吗
我使用的是ansible 2.6.3您在INI格式清单中设置的任何变量或从CLI作为extravars传递的任何变量都是字符串 您可以使用
type_debug
过滤器进行验证:
bool_variable | type_debug
使用Python 2运行Ansible时,类型为unicode
;使用Python 3运行时,类型为str
使用以下命令将其强制转换为条件中的布尔值:
bool_variable | bool
有些表达式可以工作,因为Ansible尝试将字符串值与公共(YAML中定义的)布尔值相匹配。在INI格式资源清册中设置的任何变量或作为外部变量从CLI传递的任何变量都是字符串 您可以使用
type_debug
过滤器进行验证:
bool_variable | type_debug
使用Python 2运行Ansible时,类型为unicode
;使用Python 3运行时,类型为str
使用以下命令将其强制转换为条件中的布尔值:
bool_variable | bool
有些表达式可以工作,因为Ansible尝试将字符串值与公共(YAML中定义的)布尔值相匹配。可以尝试此操作,只要布尔参数
when: STRING_PARAM|bool == true
当字符串参数为false时
when: STRING_PARAMETER == "PRODUCER" and BOOLEAN_PARAM|bool == false
如果只有布尔参数,可以尝试此操作
when: STRING_PARAM|bool == true
当字符串参数为false时
when: STRING_PARAMETER == "PRODUCER" and BOOLEAN_PARAM|bool == false
哇,谢谢你快速详细的回答!工作如期进行,非常感谢!哇,谢谢你快速详细的回答!工作如期进行,非常感谢!