解析 terraform 计划输出以检查模块与资源块的使用情况

Parsing terraform plan output to check for module vs resource block usage

我想对现有的 Terraform 构建和部署管道添加检查,以检查开发人员编写的配置格式是否正确并符合公司语法

具体来说,我想检查以确保他们没有在他们的配置中使用普通资源块,而不是模块块

例如我想我想确保他们正在使用

Module “eks_dev_wus2_app_cluster”

而不是

Resource “aws_kubernetes_cluster” “eks_dev_wus2_App_cluster”

当前方法

据我了解,我需要先转换为 json 才能解析它

terraform show -no-color -json output.tfplan > output.json

然后我应该使用 jq 工具来解析这篇文章的输出 https://linuxconfig.org/how-to-parse-a-json-file-from-linux-command-line-using-jq

关于如何专门检查 terraform 配置中的块以确认它们是资源还是模块有点模糊。

谁能指出我正确的方向?

有没有更好的获取输出值的方法?不需要完整的解决方案,只是想澄清解决这个问题的一些模糊之处

在输出格式下,有一个名为resource_changes的列表。每个更改都有一个 address 字段。为了满足您的要求,每个地址都应以 module 开头。这使得开发人员只对他们使用此 terraform 计划更改的模块负责。

假设您已经准备好 output.json,您可以这样做:

LIST=$(cat output.json| jq -r ".resource_changes[].address")

for ADDRESS in $LIST
do
    if [[ $ADDRESS != "module."* ]]; then
        echo "$ADDRESS is outside of a module"
        exit 1
    fi
done