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