为何存在待新增资源时terraform plan仍始终返回退出码0
问题原因
1. 未给terraform plan添加-detailed-exitcode参数
你提到的「0=无变更成功、1=执行错误、2=有变更成功」的退出码规则,并非terraform plan的默认行为,只有显式添加-detailed-exitcode参数时才会启用该规则。默认状态下,只要terraform plan本身没有执行报错,不管是否存在待变更资源,都会返回退出码0。
2. Shell判断逻辑存在缺陷
Shell特殊变量$?仅保存上一条执行完成的命令的退出码,你在第一个if [ $? -eq 0 ]判断执行完成后,$?的值已经变成了[(即test命令)的执行结果,后续elif判断拿到的早已不是terraform plan的原始退出码,会导致整个判断逻辑完全失效。
修复方案
先调整terraform plan执行命令添加对应参数,同时提前把退出码存入自定义变量再做判断:
# 执行plan命令并保存退出码 terraform plan -detailed-exitcode PLAN_EXIT_CODE=$? # 基于保存的退出码做判断 if [ $PLAN_EXIT_CODE -eq 0 ]; then echo "No changes, not applying" elif [ $PLAN_EXIT_CODE -eq 1 ]; then echo "Terraform plan failed" exit 1 elif [ $PLAN_EXIT_CODE -eq 2 ]; then echo "Terraform apply needed" # 此处可追加执行terraform apply的相关逻辑 fi
内容的提问来源于stack exchange,提问作者Vidya
相关产品推荐
相关产品推荐

