Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible:带“的条件;及;和布尔变量不起作用_Ansible - Fatal编程技术网

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

我在执行ansible剧本时发现以下问题:

我有一个
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

哇,谢谢你快速详细的回答!工作如期进行,非常感谢!哇,谢谢你快速详细的回答!工作如期进行,非常感谢!