如何让Terraform Check Block断言失败时抛出错误而非警告?
让Terraform Check块断言失败时抛出错误并终止流程
你当前使用的Terraform Check块默认只会在断言失败时触发警告,不会终止plan或apply操作。要实现断言失败时抛出错误并终止流程,有两种可行方案:
方案一:给Assert块添加fatal = true参数(Terraform 1.5+ 推荐)
Terraform 1.5及以上版本支持在assert块中设置fatal = true,这会让断言失败直接触发错误而非警告,强制终止后续流程。
修改后的Check块代码:
check "validate_env" { assert { condition = var.env == terraform.workspace error_message = "environment and terraform workspace do not match" fatal = true # 启用致命错误模式 } }
执行不匹配的场景时,Terraform会直接报错并终止,示例输出:
╷ │ Error: Check block assertion failed │ │ on main.tf line 20, in check "validate_env": │ 20: condition = var.env == terraform.workspace │ ├──────────────── │ │ terraform.workspace is "dev" │ │ var.env is "prod" │ │ environment and terraform workspace do not match ╵
方案二:将检查逻辑整合到变量验证(兼容旧版本Terraform)
如果你的Terraform版本低于1.5,不支持fatal参数,可以把env与workspace的匹配检查整合到变量的validation规则中。变量验证失败会直接触发错误,且在处理任何资源前就终止流程。
修改后的变量定义:
variable "env" { type = string validation { condition = contains(["dev", "staging", "pre-prod", "prod"], var.env) && var.env == terraform.workspace error_message = "env必须是dev、staging、pre-prod、prod中的一个,且必须与当前Terraform workspace匹配" } }
此时若输入不匹配的env值,会得到如下错误提示并终止流程:
╷ │ Error: Invalid value for variable │ │ on main.tf line 1: │ 1: variable "env" { │ │ env必须是dev、staging、pre-prod、prod中的一个,且必须与当前Terraform workspace匹配 │ │ This was checked by the validation rule at main.tf line 3, in variable "env". ╵
内容的提问来源于stack exchange,提问作者monte
相关产品推荐
相关产品推荐

