使用python将参数和值写入yaml

时间:2017-06-27 06:20:30

标签: python yaml openstack

我有以下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>

1 个答案:

答案 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)