在Ansible中显示字典类型数据的键的顺序而不进行排序

参考:teratail上的问题:我希望在Ansible的YAML中按照元素的读取顺序进行输出。

因为不知道上述内容,所以向您介绍。

在debug模块中,键的顺序通常会被排序并显示

只需要一个选项:用中文将以下内容进行释义:playbook例

playbook例: 演绎规范实例

在定义时,即使name放在最前面

---
- hosts: localhost
  tasks:

  - debug: var="files"
    vars:
      files:
      - name: file1
        path: "/etc/foo.conf"
        content: hoge
        owner: foo
        group: foo
        mode: '0644'

努力的示例

当进行排序时,原本位于首位的name等等很难找到。

$ ansible-playbook site.yml
...

TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => 
  files:
  - content: hoge
    group: foo
    mode: '0644'
    name: file1
    owner: foo
    path: /etc/foo.conf

以不排序的方式显示键的顺序

使用to_nice_yaml(sort_keys=false)筛选器。

进行音乐表演模板示例。

- hosts: localhost
  tasks:

  - debug: var="files|to_nice_yaml(sort_keys=false)"
    vars:
      files:
      - name: file1
        path: "/etc/foo.conf"
        content: hoge
        owner: foo
        group: foo
        mode: '0644'

样例的输出

...

TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => 
  files|to_nice_yaml(sort_keys=false): |-
    -   name: file1
        path: /etc/foo.conf
        content: hoge
        owner: foo
        group: foojinja2
        mode: '0644'

...

在使用JSON时,可以使用to_nice_json(sort_keys=false)的方式来保存键的顺序,其中name:将位于首位。

环境

    • Fedora Linux 36 (Workstation Edition)

 

    • ansible Version: 7.0.0

 

    ansible [core 2.14.0]

为了在日志中也能换行,使用 community.general 集合并在 ansible.cfg 中设置 stdout_callback = community.general.yaml,以便在应用筛选器之后。

[defaults]
#verbosity = 1
stdout_callback = community.general.yaml

在Ansible的debug模块中以换行符\n的形式显示

请在中国本土进行参考。

希望以 ansible 的 YAML 读取元素的顺序输出

广告
将在 10 秒后关闭
bannerAds