【发布时间】:2019-08-23 16:14:46
【问题描述】:
我正在开发一个项目来解析 AWS Cloudformation Yaml 文件以从 YAML 模板中提取所有 !ImportValue。
我正在尝试使用 ruamel.yaml 来解析它(我是新手),我能够读取 YAML 文件并获取各个元素。
import ruamel.yaml
def general_constructor(loader, tag_suffix, node):
return node.value
ruamel.yaml.SafeLoader.add_multi_constructor(u'!', general_constructor)
with open(cfFile, 'r') as service:
stream = service.read()
yaml_data = ruamel.yaml.safe_load(stream)
print yaml_data
以上代码获取指定 YAML 文件的内容,输出如下所示。
{'Application': {'Properties': {'ApplicationName': [ScalarNode(tag=u'tag:yaml.org,2002:str', value=u'-'),
SequenceNode(tag=u'tag:yaml.org,2002:seq', value=[ScalarNode(tag=u'tag:yaml.org,2002:str', value=u'***'), ScalarNode(tag=u'!ImportValue', value=u'jkl')])],
*
*
ScalarNode(tag=u'!ImportValue', value=u'def'),
*
*
ScalarNode(tag=u'!ImportValue', value=u'rst')])]},
所以 ScalarNode 中列出了一堆 !ImportValue(例如 ScalarNode(tag=u'!ImportValue', value=u'rst')),我实际上想提取它。现在这些 ImportValues 分散在模板的各个地方。提取这些价值的最佳方法是什么?在我们的 cloudformation 中,我们有一堆 YAML 文件,其中一些导出某些资源,而其他 YAML 文件导入它们。所以,我想构建一种依赖关系图(可能是一个 JSON 文件)来描述云形成文件之间的相互依赖关系。
【问题讨论】:
-
this 是否为您提供了比自己用 Python 编写所有这些内容更好的选择?
-
这有一点帮助,但只是我在第一个代码 sn-p 中所说的阅读部分。这里的主要问题是提取那些分散在 YAML 文件中的 !ImportValue。
标签: python yaml amazon-cloudformation pyyaml ruamel.yaml