使用 python 将参数和值写入 yaml

write parameter and value to yaml using 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
  floating_ip:
    type: string

我想将 key-> default 添加到 private_network_id 和 floating_ip(如果 default 不存在)和默认键我想添加值(我从用户那里得到)

如何在 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>

对于这种往返,你应该使用 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() 行使用适当打开的旧样式文件对象。例如

with open('input.yaml', 'w') as fp:
    yaml.dump(data, fp)