Ansible漂亮地打印JSON

3
当我运行playbook时,我得到了以正确的json格式输出的debug信息。
"ansible_facts": {
    "routes": [
        {
            "subnet": "10.0.0.0/24"
        },
        {
            "subnet": "10.0.1.0/24"
        }
    ]
},

但是当我使用local_action指令将其导出到文件中时,它显示为这样。
[{"subnet": "10.0.0.0/24"}, {"subnet": "10.0.1.0/24"}

有没有在Ansible中可用的漂亮打印模块,可以将我的文件以与调试消息中看到的相同的方式导出?
谢谢!

2
当我将其导出到文件时,你是如何做到的?你使用哪个任务来实现这个目标?有几个过滤器可能会对你有帮助。在你的情况下,相关的过滤器应该是 to_nide_json => https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#formatting-data-yaml-and-json - undefined
1
嗨,谢谢你的回复。通过“export”我指的是以下内容:local_action: copy content={{ routes }} dest=/etc/ansible/test9.json。该文件的输出格式与我在OP的第二个输出中所看到的格式相同,但我希望能以调试时所得到的格式来查看它。 - undefined
谢谢 @Zeitounator,你的 to_nice_json 技巧解决了我的问题! - undefined
1个回答

3

虽然无法直接在屏幕上输出变量,但可以使用template任务,在通过to_nice_json过滤器处理后打印变量。例如:

---
- hosts: localhost
  gather_facts: false
  vars:
    my_ansible_facts:
      routes:
      - subnet: 10.0.0.0/24
      - subnet: 10.0.1.0/24

  tasks:
  - template: src=nice_yaml_filter.j2 dest=/tmp/nice_yaml_filter.out

请注意,我不使用与您相同的变量,而是使用我填充的my_ansible_facts变量。
模板文件的内容是nice_yaml_filter.j2:
{{ my_ansible_facts | to_nice_json }}

结果:

[http_offline@greenhat-32 ANSIBLE_TESTS]$ cat /tmp/nice_yaml_filter.out 
{
    "routes": [
        {
            "subnet": "10.0.0.0/24"
        },
        {
            "subnet": "10.0.1.0/24"
        }
    ]
}[http_offline@greenhat-32 ANSIBLE_TESTS]$ 

干杯


似乎很简单,但它不起作用。子网信息并非硬编码,而是从先前的模块中获取,并且我将它们注册为路由“register: routes”。我尝试了以下方法,但我的playbook不想运行:- name: 显示数据 vars: my_ansible_facts: routes: - subnet: "{{ routes }}" tasks: - templates: src=/etc/ansible/nice_yaml_filter.j2 dest=/etc/ansible/test10.json出现错误消息:ERROR!操作中的参数类型意外:<class 'ansible.parsing.yaml.objects.AnsibleSequence'> - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接