我想向现有的 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/