使用 Python 以编程方式编辑 Terraform 配置文件

Edit Terraform configuration files programmatically with Python

我正在尝试使用 Python 编辑 Terraform 配置文件。我正在使用 python hcl2 库解析 Terraform 文件 (.tf),其中 returns 一个 python 字典。我想添加新的 key/value 对或更改字典中的某些值。直接写入文件不是一个好的做法,因为返回的 python 字典不是 Hashicorp 配置语言格式。也可以有多个配置文件,如 variables.tf 等链接在一起。我应该实现自己的序列化程序,将 python 字典转换为 terraform 配置文件,还是有更简单的方法?

python-hcl2 库实现了 HCL 语法的解析器,但它没有序列化器,它的 API 旨在删除所有 HCL 细节并仅保留基本的Python 数据结构,因此它似乎没有保留足够的信息来在不丢失评论、属性排序等细节的情况下对输入进行手术式修改

在我写这篇文章时,唯一明确支持就地更新现有配置文件的 HCL 实现是 Go 包 hclwrite。它允许调用者加载任意 HCL 源代码,通过外科手术修改它的部分内容,然后重新序列化更新后的版本,只对输入的未更改部分进行较小的空白规范化。

原则上可以将 hclwrite 移植到 Python,或者从像 python-hcl2 returns 这样的字典中实现序列化器,如果你不关心保留不变的输入,但这两个看起来都是一个重要的项目。

如果您决定这样做,需要特别注意的一个部分是将字符串序列化为 HCL 语法,因为所需的转义与任何其他语言都不完全相同。您可能希望参考 hclwrite 中的 the escapeQuotedStringLit function 以查看所有要处理的情况,因此您可以潜在地在 Python.

中实现兼容逻辑