使用“to_nice_yaml”过滤器时 Ansible 中的奇怪行为
Strange behavior in Ansible when using `to_nice_yaml` filter
我有一个 ansible 剧本,它首先使用 set_fact
初始化一个事实,然后是一个使用该事实并从中生成 YAML 文件的任务。
剧本看起来像这样
- name: Test yaml output
hosts: localhost
become: true
tasks:
- name: set config
set_fact:
config:
A12345: '00000000000000000000000087895423'
A12352: '00000000000000000000000087565857'
A12353: '00000000000000000000000031200527'
- name : gen yaml file
copy:
dest: "a.yaml"
content: "{{ config | to_nice_yaml }}"
实际输出
当我运行剧本时,a.yaml中的输出是
A12345: 00000000000000000000000087895423
A12352: 00000000000000000000000087565857
A12353: '00000000000000000000000031200527'
注意只有最后一行的值在引号中
预期输出
预期输出为
A12345: '00000000000000000000000087895423'
A12352: '00000000000000000000000087565857'
A12353: '00000000000000000000000031200527'
应引用所有值。
我这辈子都弄不明白为什么只有最后一行的值用单引号引起来。
我已经在 Ansible 版本 2.7.7 和版本 2.11.12 上尝试过此操作,两者都 运行ning 反对 Python 3.7.3。行为相同。
这是因为 031200527
是 an octal number,而 087895423
不是,因此,八进制标量需要引用,但其他值不需要,因为前导零在 yaml 中被准确解释00hello
的方式相同——只是 ascii 0
后跟其他 ascii 字符
如果它真的让你很困扰,并且出于某种原因必须引用标量,to_nice_yaml
接受相同的 kwargs as does pyyaml.dump
:
- debug:
msg: '{{ thing | to_nice_yaml(default_style=quote) }}'
vars:
quote: "'"
thing:
A1234: '008123'
A2345: '003123'
在这种情况下也将引用键,但无条件引用标量
我有一个 ansible 剧本,它首先使用 set_fact
初始化一个事实,然后是一个使用该事实并从中生成 YAML 文件的任务。
剧本看起来像这样
- name: Test yaml output
hosts: localhost
become: true
tasks:
- name: set config
set_fact:
config:
A12345: '00000000000000000000000087895423'
A12352: '00000000000000000000000087565857'
A12353: '00000000000000000000000031200527'
- name : gen yaml file
copy:
dest: "a.yaml"
content: "{{ config | to_nice_yaml }}"
实际输出
当我运行剧本时,a.yaml中的输出是
A12345: 00000000000000000000000087895423
A12352: 00000000000000000000000087565857
A12353: '00000000000000000000000031200527'
注意只有最后一行的值在引号中
预期输出
预期输出为
A12345: '00000000000000000000000087895423'
A12352: '00000000000000000000000087565857'
A12353: '00000000000000000000000031200527'
应引用所有值。
我这辈子都弄不明白为什么只有最后一行的值用单引号引起来。
我已经在 Ansible 版本 2.7.7 和版本 2.11.12 上尝试过此操作,两者都 运行ning 反对 Python 3.7.3。行为相同。
这是因为 031200527
是 an octal number,而 087895423
不是,因此,八进制标量需要引用,但其他值不需要,因为前导零在 yaml 中被准确解释00hello
的方式相同——只是 ascii 0
后跟其他 ascii 字符
如果它真的让你很困扰,并且出于某种原因必须引用标量,to_nice_yaml
接受相同的 kwargs as does pyyaml.dump
:
- debug:
msg: '{{ thing | to_nice_yaml(default_style=quote) }}'
vars:
quote: "'"
thing:
A1234: '008123'
A2345: '003123'
在这种情况下也将引用键,但无条件引用标量