gpt4 book ai didi

python - 使用 Python 加载 CloudFormation YAML

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:52 26 4
gpt4 key购买 nike

我有一组最近从 JSON 转换而来的 YAML AWS Cloud Formation 模板。

当使用 JSON 时,我能够加载这些模板并使用 jinja 转换它们,以从中生成一些 Markdown 文档。我正在尝试使用 python 中的 YAML 执行相同的操作。

我在使用 YAML 标签的 cloudformation 模板中使用简写函数语法。例如

Properties:
MinSize: !Ref ClusterSize
MaxSize: !Ref ClusterSize

当尝试使用 ruamel.yaml 包加载这些标签时,构造函数会失败,因为它无法处理标签,因为它不了解它们。

有没有办法解决这个问题,以便我能够加载 YAML 文档,以便我可以检索/查询输出和资源?

最佳答案

您错误地认为 ruamel.yaml 无法处理标签。但当然你必须提供如何处理任何未知标签的信息,它无法猜测你要使用 !Ref 加载什么样的数据:

import ruamel.yaml

yaml_str = """\
Properties:
MinSize: !Ref ClusterSize
MaxSize: !Ref ClusterSize
"""


class Blob(object):
def update(self, value):
self.value = value

def __str__(self):
return str(self.value)


def my_constructor(self, node):
data = Blob()
yield data
value = self.construct_scalar(node)
data.update(value)

ruamel.yaml.SafeLoader.add_constructor(u'!Ref', my_constructor)

data = ruamel.yaml.safe_load(yaml_str)
print('data', data['Properties']['MinSize'])

打印:

ClusterSize

如果你想摆脱许多不同的标签,并且不关心“一切都是字符串”,你也可以这样做:

import ruamel.yaml

yaml_str = """\
Properties:
MinSize: !Ref ClusterSize
MaxSize: !Ref ClusterSize
SizeList:
- !abc 1
- !xyz 3
"""


def general_constructor(loader, tag_suffix, node):
return node.value


ruamel.yaml.SafeLoader.add_multi_constructor(u'!', general_constructor)


data = ruamel.yaml.safe_load(yaml_str)
print(data)

给出:

{'Properties': {'SizeList': ['1', '3'], 'MinSize': 'ClusterSize', 'MaxSize': 'ClusterSize'}}

(请注意,标量 13 作为字符串而不是普通整数加载)

关于python - 使用 Python 加载 CloudFormation YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41089065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com