【问题标题】:Unable to open terraform plan -out file from outside of Terraform?无法从 Terraform 外部打开 terraform plan -out 文件?
【发布时间】:2021-10-27 22:22:47
【问题描述】:

是否可以打开运行terraform plan -out 时创建的文件?

我已运行terraform plan -out samplefile.txt 并想仔细阅读该文件的内容,但我找不到能够打开它的文本编辑器。

不确定是否是字符编码问题。

【问题讨论】:

  • 这是一种二进制格式,仅供 Terraform 读取并传递给 apply 或 destroy 命令单独使用,以便他们可以检查自从您接受该计划以来没有任何变化。通过单独阅读计划,您想在这里实现什么目标?如果您需要的话,您可以通过运行terraform show -json plan.out > plan.json(其中plan.out 是terraform plan -out 的输出文件)将计划文件转换为JSON 输出。
  • 我想要查看内容的原因是我正在阅读有关 Terraform 如何将 state-file 中的 serial number 匹配到 plan.out 文件以跟踪是否已对计划创建后的另一个操作的状态。我很想看到这个。
  • 如果您只是出于好奇和理解而对它感兴趣,您可能想知道在 Terraform v0.12 和 v0.13 中,计划文件是一个包含一些不同工件的 zip 存档:先前的状态、配置和计划更改的摘要。您可以使用 .zip 扩展名保存它,并根据需要使用普通的 zip 工具对其进行检查,但请记住,它是一个 zip 存档,并且 zip 文件中条目的特定结构只是当前 Terraform 的实现细节版本,而不是保证在未来的版本中保持真实。
  • 马丁真的很有趣。我以前不知道这一点。但是将-out 文件保存为.zip 实际上使事情变得更加清晰,就幕后发生的事情而言。非常感谢!

标签: terraform terraform0.12+


【解决方案1】:

正如Terraform documentation for the plan command and its -out parameter 中提到的,这意味着纯粹由 Terraform 使用,因此 apply 或 destroy 命令只会执行计划确定的操作。这可以防止在运行计划和应用计划之间您的提供程序发生变化的问题,这可能导致 Terraform 执行与计划阶段显示的不同的、具有潜在破坏性的操作。

Terraform internals documentation 还涵盖了来自terraform plan -out 的二进制输出如何不被其他工具直接读取:

当 Terraform 计划进行更改时,它会打印出人类可读的 总结到终端。当使用-out=<PATH> 运行时,它还可以写入 一个更详细的二进制计划文件,以后可以用来 应用这些更改。

由于计划文件的格式不适合用于外部 工具(可能永远不会),Terraform 可以输出 计划文件更改的机器可读 JSON 表示。它可以 还将状态文件转换为相同的格式,以简化数据加载 并提供更好的长期兼容性。

如果您想查看计划文件的内容,可以使用terraform show -json command。

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 2021-05-20
    • 2021-03-19
    • 2021-07-22
    • 2018-11-28
    • 2019-10-13
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多