当前位置: 首页 > 知识库问答 >
问题:

Ansible到底是如何解析布尔变量的?

夏侯弘量
2023-03-14
    null

例如,我在清单中定义了两个变量:

abc=false
xyz=False

当调试角色中这些变量的类型时······

- debug:
    msg: "abc={{ abc | type_debug }}  xyz={{ xyz | type_debug }}"

...然后ABC变成Unicode,但是XYZ被解释为bool:

ok: [localhost] => {
    "msg": "abc=unicode  xyz=bool"
}
  vars:
    abc: false
    xyz: False

我不得不在执行生产剧本后艰难地意识到这一点,运行一些不应该运行的东西,因为在库存中变量设置为“false”而不是“false”。因此,我真的很想找到一个明确的答案,关于Ansible如何理解布尔值,以及它如何依赖于变量的定义位置/方式。为了保险起见,我应该简单地总是使用大写的true/false吗?YAML文件(格式key:value)中的布尔值不区分大小写,而属性文件(格式key=value)中的布尔值区分大小写,这是否有效?任何更深刻的见解都将受到高度赞赏。

共有1个答案

壤驷宏才
2023-03-14

用YAML编写的Playbooks、vars_files和inventory文件首先由YAML解析器处理。它允许为将存储为boolean类型的值使用几个别名:yes/notrue/falseon///,在几种情况下定义:true/true/(因此它们并不真正区分大小写)。

YAML定义将可能的值指定为:

y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

Ansible文档确认:

您还可以用几种形式指定布尔值(true/false):

create_key: yes
needs_agent: no
knows_oop: True
likes_emacs: TRUE
uses_cvs: false

当Ansible读取INI格式的清单时,它使用Python内置类型处理变量:

使用key=value语法传入的值被解释为Python文字结构(字符串、数字、元组、列表、dict、boolean、None),或者解释为字符串。例如,var=false将创建一个等于false的字符串。

 类似资料:
  • 我注意到java有一个问题。它不能解析空值的布尔类。我知道它有静态方法,但它的签名声明它只接受,而不接受。 换句话说,它有以下签名: 但不是: 检查布尔值而不陷入NullPointerException的最佳方法是什么?

  • 我使用的是Windows 7机器,其"控制面板\时钟,语言和区域"是丹麦" 根据扫描仪的文档: 扫描仪的初始区域设置是Locale.getDefault()方法返回的值; 但当我运行代码时: 它输出“en_US”,然后抛出一个java。util。sc.nextDouble()处的输入不匹配异常。当扫描器初始化为“1,0”时,它工作 但是,如果我明确设置了区域设置: 它输出“en_US”,然后很好地

  • 照例,每个类型的值都有一个相应类型的变量。C++中的布尔类型叫做bool。布尔变量的使用和其他类型类似,如: bool fred; fred = true; bool testResult = false; 第一行是一个简单的变量声明;第二行是个赋值;第三行是声明和赋值的组合,叫做初始化。 前面提到过,比较操作符的结果是布尔值,所以可以将结果保存在布尔变量中,如: bool evenFlag =

  • 问题内容: 谁能说出Java 中布尔值的位大小? 问题答案: 它取决于虚拟机,但是很容易将代码从类似的问题改编成关于Java中字节的问题: 重申一下,这取决于VM,但是在运行Sun的的Windows笔记本电脑上,我得到以下结果: 这表明,Sun的JVM基本上可以将布尔值打包成一个字节。

  • 问题内容: 我声明一个布尔变量。例如, 现在,如果我执行以下代码段: 我懂了。好吧,我知道它很明显,但是我需要知道其背后的原因。 问题答案: 当您评估对象的布尔值时,Java会将其取消装箱(自装箱功能,自1.5开始)。因此,实际的代码是:。然后它抛出。对于任何装箱的值,将空对象拆箱将引发此异常。 在1.5之前,您必须手动将值拆箱:所以它更明显(也更加冗长:)

  • 问题内容: 我正在使用Windows 7计算机,其“控制面板\时钟,语言和区域”为“丹麦” 根据扫描仪的文档: 扫描程序的初始语言环境是Locale.getDefault()方法返回的值。 但是当我运行代码时: 它输出“ en_US”,然后在sc.nextDouble()处引发java.util.InputMismatchException。当扫描仪初始化为“ 1,0”时,它可以工作 但是,如果我