【问题标题】:Ansible pretty print jsonAnsible 漂亮的打印 json
【发布时间】:2021-01-31 06:55:08
【问题描述】:

当我运行我的剧本时,我会得到正确的 json 格式的调试输出,我想要它

"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 中可以以与我在调试消息中看到的相同的方式导出我的文件?

谢谢!

【问题讨论】:

  • when I export it to a file => 你是怎么做到的?您用来实现这一目标的任务在哪里?有几个过滤器可能会对您有所帮助。你的情况下相关的应该是to_nide_json => docs.ansible.com/ansible/latest/user_guide/…
  • 您好,感谢您对 export 的回复,我的意思是以下local_action: copy content={{ routes }} dest=/etc/ansible/test9.json。该文件的输出格式与您在我的第二个 OP 输出中看到的格式相同,但我希望以调试期间得到的格式显示它。
  • 感谢@Zeitounator 你的 to_nice_json 技巧解决了我的问题!

标签: json ansible pretty-print


【解决方案1】:

不完全是您在屏幕上获得的输出,但您可以使用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]$ 

干杯

【讨论】:

  • 感谢似乎很简单,但它不起作用。子网事实不是硬编码的,它们来自上一个模块,我将它们注册为路由“注册:路由”。我尝试了以下操作,但我的剧本不想运行 - name: display the data vars: my_ansible_facts: routes: - subnet: "{{ routes }}" tasks: - templates: src=/etc/ansible/nice_yaml_filter.j2 dest=/etc/ansible/test10.json 收到 ERROR! unexpected parameter type in action: <class 'ansible.parsing.yaml.objects.AnsibleSequence'> 的错误消息
猜你喜欢
  • 2014-05-19
  • 2014-05-12
  • 2022-01-22
  • 2017-11-03
  • 2011-05-05
  • 2017-05-01
  • 2014-03-18
  • 1970-01-01
相关资源
最近更新 更多