我已保存terraform plan -out=my-plan
并打算将其保存到源代码管理中,并进一步注入自定义工具以供摄取和执行测试等。
然而,my-plan
的文件内容混乱,我想知道编码的用途是什么。
否则,有没有办法将my-plan
保存为人类可读的文本格式?
答案 0 :(得分:4)
虽然此处提到的其他工具很有用,但在Terraform空间中事物会定期更改,并且第三方工具经常无法保持最新。
一段时间以来,Terraform直接支持以与您运行plan
时显示的人类可读格式相同的格式查看计划文件:
terraform show <filename>
从v0.12开始,您现在还可以查看JSON格式的计划文件,您可以将其保存以使用其他工具进行进一步的工作:
terraform show -json <filename>
https://www.terraform.io/docs/internals/json-format.html中有JSON模式的说明。在撰写本文时,请注意:
输出...当前的主版本为零,以表示该格式是实验性的,可能会更改。将来的版本将分配一个非零的主要版本。但是,我们预计在其第一个主要版本之前,格式不会发生重大的重大更改。
答案 1 :(得分:3)
Terraform计划输出是一种二进制格式,不能在Terraform之外使用。从技术上讲,您可以使用Terraform用于处理格式的任何序列来序列化它,但是没有稳定的API,并且可能随时改变。
Hashicorp的一位员工(Phinze)在本期杂志中简要介绍了这一点:https://github.com/hashicorp/terraform/issues/7976
一个可能相当脆弱的选项是简单地解析运行terraform plan
的文本输出。我在使用Terraform根本不处理的JSON差异时使用Terraform Landscape来本地格式化计划输出,并且可以应对这种情况。然而,它也倾向于打破“次要”版本升级(例如0.9到0.10),因为Terraform根本没有将其指定为API。 Terraform Plan Parser还解析文本输出,并注意到它不能与二进制输出一起使用。
答案 2 :(得分:0)
我发现了这个并且适合使用tfjson
答案 3 :(得分:0)
Terraform使用gob格式对计划进行编码/解码,直到version 0.11.x 在terraform版本0.12上进行了更改,他们开始使用协议缓冲区。
除非您在那里重写依赖项,否则tfjson
项目可能不适用于0.11.x和0.12.x