Terraform变量验证规则触发逻辑异常及修正方法咨询
问题原因分析
Terraform变量验证的核心逻辑是:condition表达式返回true时判定变量合法(验证通过);返回false时,才会抛出指定的error_message。
你当前的验证条件写反了——原本想在变量包含foo或bar键时触发错误,但你的条件是当包含这两个键时返回true(验证通过),不包含时返回false(触发错误),因此出现了和预期完全相反的结果。
正确实现方式
要实现“仅当configurations包含foo或bar时触发验证提示”,需要将条件取反,让表达式在包含这两个键时返回false,从而触发错误。
以下是两种等价的正确写法:
写法一:对原条件整体取反
variable "configurations" { type = map(any) validation { condition = ! (contains(keys(var.configurations), "foo") || contains(keys(var.configurations), "bar")) error_message = "'foo' or 'bar' are not allowed in configurations." } }
写法二:拆分取反后用逻辑与组合
variable "configurations" { type = map(any) validation { condition = !contains(keys(var.configurations), "foo") && !contains(keys(var.configurations), "bar") error_message = "'foo' or 'bar' are not allowed in configurations." } }
这两种写法都会在configurations包含foo或bar键时,让condition返回false,触发错误提示;不包含时返回true,验证正常通过。
内容的提问来源于stack exchange,提问作者Frédéric De Lène Mirouze
相关产品推荐
相关产品推荐

