Terraform 在自动化中计划人类可读的输出

Posted

技术标签:

【中文标题】Terraform 在自动化中计划人类可读的输出【英文标题】:Terraform plan human readable output in automation 【发布时间】:2020-03-04 13:04:01 【问题描述】:

我已经通过 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 计划的输出以便可以引用它的最佳方法是什么,但是在应用完成之前需要进行检查。在我看来,它只在终端上工作得很好。

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

【问题讨论】:

【参考方案1】:

默认情况下,Terraform 使用 terminal escape sequences 以简单的格式(例如颜色或粗体字)突出显示输出的部分内容。

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

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

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


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

terraform plan -out=tfplan
terraform show -json tfplan

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

【讨论】:

-no-color 起到了神奇的作用。不知道它的输出方式会产生很大的不同【参考方案2】:

添加到您的管道

options 
   ansiColor('xterm')

来自

https://plugins.jenkins.io/ansicolor/

【讨论】:

以上是关于Terraform 在自动化中计划人类可读的输出的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mahout 成功运行 kmeans 集群(尤其是获得人类可读的输出)

人类可读的 JSON:又名在 json 转储中添加空格和中断

将 dict 保存为 JSON,以便它们是人类可读的 [重复]

C++ IP 地址人类可读的形式

python人类可读的大数字[重复]

如何使用 ruby​​ on rails 生成人类可读的时间范围