json - 解析 terraform plan 输出以检查模块与资源 block 的使用情况

标签 json azure-devops terraform azure-pipelines jq

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

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

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

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 配置中的 block 以确认它们是资源还是模块有点模糊。

有人能指出我正确的方向吗?

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

最佳答案

在输出格式下,有一个名为resource_changes的列表。每个更改都有一个地址字段。为了满足您的要求,每个地址都应该以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

关于json - 解析 terraform plan 输出以检查模块与资源 block 的使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72002210/

相关文章:

Terraform - GCP - 将 IP 地址链接到链接到云存储桶的负载均衡器

json - 在 Node.js 中 Promisify 一个递归函数

MySQL 和 JSON - 将数组转换为行

c# - 使用 C# 读取 AppInsights 的 JSON 输出

git - Azure DevOps/VSTS 总是在干净的存储库上报告 "DETACHED HEAD"

xamarin - Xamarin iOS 构建的 DevOps CI 错误 在钥匙串(keychain)中找不到有效的 iOS 代码签名 key

docker - 使用 Terraform 和 Kubernetes 部署时如何修改 Docker 容器中的文件?

terraform - 如何将 IPv4 地址传递给 terraform 配置程序 local-exec

javascript - 通过 javascript 循环计算用户位置和许多目的地之间的驾驶距离

Azure Devops 管道无法访问 Docker Windows 镜像?