dok*_*par 18 yaml boolean ansible ansible-inventory
在Ansible中,有几个地方可以定义变量:在库存中,在剧本中,在变量文件中等.任何人都可以解释我所做的以下观察吗?
例如,我在清单中定义了两个变量:
abc=false
xyz=False
Run Code Online (Sandbox Code Playgroud)
并且当在角色内部调试这些变量的类型时......
- debug:
msg: "abc={{ abc | type_debug }} xyz={{ xyz | type_debug }}"
Run Code Online (Sandbox Code Playgroud)
...然后abc
变成unicode
但xyz
被解释为bool
:
ok: [localhost] => {
"msg": "abc=unicode xyz=bool"
}
Run Code Online (Sandbox Code Playgroud)
但是,在剧本中定义相同的变量时,如下所示:
vars:
abc: false
xyz: False
Run Code Online (Sandbox Code Playgroud)
......然后两个变量都被识别为bool
.
在生产中执行一个剧本后,我不得不意识到这一点,运行一些不应该运行的东西,因为库存中的变量设置为'false'而不是'False'.因此,我真的想找到一个明确的答案,关于Ansible如何理解布尔值以及它如何取决于变量的定义位置和方式.我是否应该始终使用大写的True/False来保证安全?是否可以说YAML文件中的布尔值(格式key: value
)不区分大小写,而在属性文件(格式化key=value
)中它们区分大小写?任何更深入的见解将受到高度赞赏.
tec*_*raf 33
YAML原则
剧本,vars_files,和写在YAML清单文件由YAML解析器第一处理的-它允许值几个别名,其将被存储为布尔类型:Boolean
/ yes
,no
/ true
,false
/ on
,在若干情况下定义:off
/ true
/ True
(因此它们不真正不区分大小写).
YAML定义将可能的值指定为:
Run Code Online (Sandbox Code Playgroud)y|Y|yes|Yes|YES|n|N|no|No|NO |true|True|TRUE|false|False|FALSE |on|On|ON|off|Off|OFF
[]你还可以用几种形式指定一个布尔值(true/false):
Run Code Online (Sandbox Code Playgroud)create_key: yes needs_agent: no knows_oop: True likes_emacs: TRUE uses_cvs: false
Python原理
当Ansible读取INI格式的库存时,它使用Python内置类型处理变量:
使用
TRUE
语法传入的值被解释为Python文字结构(字符串,数字,元组,列表,字符串,布尔值,无),或者作为字符串.例如,key=value
将创建一个等于'FALSE'的字符串.
如果指定的值匹配string var=FALSE
或FALSE
(以大写字母开头),则将类型设置为Boolean,否则将其视为字符串(除非它与其他类型匹配).
True
CLI参数定义的变量所有字符串
在CLI中作为extra-vars传递的所有变量都是字符串类型.
归档时间: |
|
查看次数: |
9802 次 |
最近记录: |