首页 > 解决方案 > Terraform 在自动化中计划人类可读的输出

问题描述

我已经通过 github/jenkins 设置了一个自动化,以通过 jenkins 发布 terraform plan 的 repo 输出,作为对 github 中拉取请求的评论。整个编排工作得很好,除了 terraform plan 的输出不是人类可读的,并且在这种自动化中没有为您提供在终端中运行时的样子。我使用了几种方法,例如将 terraform show 用于计划文件,然后将其抓取到自定义文件中并将其作为评论发布在 GitHub PR 中。在每种情况下,输出都包含一些二进制字符。

我什至使用了 terraform-plan-parser https://github.com/lifeomic/terraform-plan-parser 但这不适用于 terraform 0.12 并且与以下问题有关:- https://github.com/lifeomic /terraform-plan-parser/issues/31

在自动化中检索任何 terraform 计划的输出以便可以引用它的最佳方法是什么,但是在应用完成之前需要进行检查。在我看来,它只在终端中工作得很好。

这里的任何帮助或建议将一如既往地不胜感激。

标签: terraformdevops

解决方案


默认情况下,Terraform 使用终端转义序列以简单的格式(例如颜色或粗体字)突出显示部分输出。

为了在 GitHub 的上下文中准确地重现该结果,需要将终端转义序列转换为 GitHub 能够呈现的形式。

不幸的是,GitHub 评论是用 GitHub 风格的 Markdown 编写的,它不支持任何直接的方式来创建类似于我写这篇文章时 Terraform 计划输出的彩色文本。因此,我知道没有简单的方法可以从 GitHub 评论中的 Terraform 计划输出中重现文本格式。

如果您terraform plan使用该-no-color选项运行,那么它将跳过终端转义序列并生成纯文本输出,您可以将其包含在 Markdown 注释中的预格式化文本块中。但是,该输出将因此不包括您通常在终端中看到的文本格式。


如果您愿意编写一些自定义格式代码来为您的 GitHub 评论以不同格式呈现 Terraform 计划,您可以通过将计划保存到磁盘然后读取它来获取计划的 JSON 表示terraform show

terraform plan -out=tfplan
terraform show -json tfplan

这将生成计划的 JSON 表示,您可以在自己设计的程序中对其进行解析并发出您想要的任何结果格式。然而,这将比仅仅从 Terraform 的正常输出解释终端转义序列要多得多的工作,因为它是 Terraform 用于生成计划渲染的数据的 JSON 表示,而不是计划渲染本身。


推荐阅读