Terraform计划输出:使用的编码是什么

时间:2018-03-20 13:19:04

标签: terraform

我已保存terraform plan -out=my-plan并打算将其保存到源代码管理中,并进一步注入自定义工具以供摄取和执行测试等。

然而,my-plan的文件内容混乱,我想知道编码的用途是什么。

否则,有没有办法将my-plan保存为人类可读的文本格式?

4 个答案:

答案 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