我有以下YAML文件:
heat_template_version: 2015-10-15
parameters:
image:
type: string
label: Image name or ID
default: CirrOS
private_network_id:
type: string
label: Private network name or ID
floating_ip:
type: string
我想添加key->默认为private_network_id和floating_ip(如果默认不存在)和默认键我想添加值(我从用户那里得到)
如何在python中实现这一目标?
生成的YAML应如下所示:
heat_template_version: 2015-10-15
parameters:
image:
type: string
label: Image name or ID
default: CirrOS
private_network_id:
type: string
label: Private network name or ID
default: <private_network_id>
floating_ip:
type: string
default: <floating_ip>
答案 0 :(得分:1)
对于这种往返游戏,您应该使用ruamel.yaml
(免责声明:我是该套餐的作者)。
假设您的输入位于文件input.yaml
和以下程序中:
from ruamel.yaml import YAML
from pathlib import Path
yaml = YAML()
path = Path('input.yaml')
data = yaml.load(path)
parameters = data['parameters']
# replace assigned values with user input
parameters['private_network_id']['default'] = '<private_network_id>'
parameters['floating_ip']['default'] = '<floating_ip>'
yaml.dump(data, path)
之后,您的文件将与您请求的输出完全匹配。
请注意,YAML文件中的注释以及密钥排序会自动保留(YAML规范无法保证)。
如果您仍在使用Python2(标准库中没有pathlib
),请使用from ruamel.std.pathlib import Path
或使用适当打开的旧样式重写.load()
和.dump()
行,文件对象。 E.g。
with open('input.yaml', 'w') as fp:
yaml.dump(data, fp)