我正在尝试在自动化中运行terraform validate(v1.16(。有没有一种方法可以在所有目录和给定路径中的子目录中递归地运行地形验证。
如果我想在这种情况下运行terraform validation
,我甚至需要初始化子目录吗?例如:
|-d1-infra
| |-outputs.tf
| |-main.tf
| |-tfmodules
| | |-new_host1
| | | |-outputs.tf
| | | |-variables.tf
| | | |-ay.tf
| | | |-cn.tf
| | |-new_host2
| | | |-outputs.tf
| | | |-variables.tf
| | | |-y.tf
| | | |-n.tf
| |-pol.tf
| |-variables.tf
| |-data.tf
| |-backend.tf
| |-host1.tf
如何在shell脚本中验证目前我正在做
tf_dirs_to_validate=(d1-infra d2-infra d3-infra)
for d in "${tf_dirs_to_validate[@]}" ; do
if [ "`cd ./$$d && terraform init -input=false -backend=false > /dev/null && terraform validate -json`" ]; then
echo "===>Terraform format check passed successfully in <---- $$d -->"
else
echo "validation failed in <---- $$d -->" && exit 1
fi
done;
但这似乎只在顶级目录上验证,即d1-infra
d2-infra
d3-infra
,但不能验证模块
@Jenifer,我想在这种情况下你可以借助terragrumt。Terragrunt是Terraform的一个薄包装器,所以当您运行任何Terragrunt命令(如计划、验证、应用等(时,Terragrunt都会执行后续的Terraform命令。
在您的情况下,您可以使用以下命令
terragrunt run-all validate
参考:https://terragrunt.gruntwork.io/docs/reference/cli-options/#validate-所有不推荐的使用运行所有
同样的内容也可以包含在bash脚本中。