【问题标题】:Edit Terraform configuration files programmatically with Python使用 Python 以编程方式编辑 Terraform 配置文件
【发布时间】:2021-04-17 11:58:28
【问题描述】:

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

【问题讨论】:

  • 您知道 Terraform 还支持 JSON 配置文件吗? terraform.io/docs/configuration/syntax-json.html 从 Python 输出几乎肯定会更容易。
  • 是的,但我正在处理已经准备好的 Terraform 配置文件,这些文件使用 HCL,我不想更改其语法,只需更改一些值。

标签: python terraform hcl


【解决方案1】:

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

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

原则上,可以将hclwrite 移植到Python,或者如果您不关心保持不变的输入,则可以从python-hcl2 返回之类的字典中实现序列化程序,但这两个似乎都是一个重要的项目。

如果您决定这样做,那么需要特别注意的部分是将字符串序列化为 HCL 语法,因为所需的转义与任何其他语言都不完全相同。您可能希望从hclwrite 参考the escapeQuotedStringLit function 以查看要处理的所有案例,这样您就可以在Python 中实现兼容的逻辑。

【讨论】:

  • 感谢详细解答,我正在试用 Go 包 hclwrite。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多