我对JSON和Python有一定的经验,因此我想将Ansible YAML剧本可视化为常规的Python或JSON内联数据结构。是否可以将YAML文件的全部内容编写为由列表和字典组成的内联数据结构?如果是这样,我还可以使用空格使其更易于阅读吗?
示例:
---
- hosts: webservers
remote_user: root
gather_facts: true
tasks:
- name: ensure apache is at the latest version
yum:
name: httpd
state: latest
- name: write the apache config file
template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
哪个会成为:
---
[{hosts: webservers, remote_user: root, gather_facts: true, tasks: [{name: ensure apache is at the latest version, yum: {name: httpd, state: latest}}], [name: write the apache config file, template: {src: /srv/httpd.j2, dest: /etc/httpd.conf}]}]
答案 0 :(得分:0)
通常,您不能将YAML表示为JSON,因为JSON是子集 YAML。例如。 YAML标签和锚点不能用JSON表示,并且 JSON对象中的键限制非常严格,而 YAML本质上可以将任何节点作为映射中的键。
Python可以完全代表YAML,否则ruamel.yaml
可以
不是双向YAML文件。这样您就可以生成所有YAML数据
使用常规Python构造从头开始构建结构,然后转储
他们到YAML。对于标记的结构,但这还不完全
不重要的。您还必须考虑到没有图书馆能为您提供完整的信息
控制句法表示,通常缩进
所有映射和所有序列都相同(甚至对所有都相同)
集合。)
如果您的YAML不包含代码(例如您的示例),则可以将YAML作为 常规的Python结构,例如字典,列表和基元,例如 字符串,整数,浮点数,datetime.datetime,布尔值。你可以 加载YAML并打印数据结构:
import sys
import ruamel.yaml
yaml_str = """---
- hosts: webservers
remote_user: root
gather_facts: true
tasks:
- name: ensure apache is at the latest version
yum:
name: httpd
state: latest
- name: write the apache config file
template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
"""
yaml = ruamel.yaml.YAML(typ='safe')
data = yaml.load(yaml_str)
print(data)
给出:
[{'hosts': 'webservers', 'remote_user': 'root', 'gather_facts': True, 'tasks': [{'name': 'ensure apache is at the latest version', 'yum': {'name': 'httpd', 'state': 'latest'}}, {'name': 'write the apache config file', 'template': {'src': '/srv/httpd.j2', 'dest': '/etc/httpd.conf'}}]}]