Terraform 1.9.8:引用其他变量时变量验证条件恒为真
Terraform变量验证跨变量引用异常问题
我正在为Kafka主题编写Terraform模块,需要对Schema相关变量做验证。Schema分为AVRO和JSON两种类型,均定义在.json文件中,因此用schema_format变量指定Schema类型,schema_path变量指向对应的.json文件路径。
验证schema_path对应文件是否有效时,需要根据Schema类型确定检查规则。我尝试了多种写法,当前的验证条件如下:
variable "schema_path" { type = string description = "Schema Registry要上传的Schema文件相对路径。" ... ################### # 这段验证不生效 ################### validation { conditions = (var.schema_format != "AVRO") || (jsondecode(file(var.schema_path)).type == "record") error_message = "当schema_format为'AVRO'时,Schema文件必须包含'type'为'record'的定义。" } } variable "schema_format" { type = string description = "Schema类型,只能是'JSON'或'AVRO'。" ... }
无论怎么设置,只要验证条件中引用了其他变量,条件就会始终评估为true,导致错误永远不会触发。这是Terraform的bug,还是我哪里理解错了?
我试了很多包含其他变量的条件,结果都为true。比如:
variable "schema_path" { ... validation { conditions = (length(var.schema_format) < 0) || (length(var.schema_path) < 0) error_message = "TEST" } } variable "schema_format" { ... }
在我看来这个条件无论如何都应该是false,但实际评估结果为true。
如果写成下面这样,条件会评估为false,但一旦引入其他变量,结果就变成true:
variable "schema_path" { ... validation { conditions = false || (length(var.schema_path) < 0) error_message = "TEST" } } variable "schema_format" { ... }
如果这是预期行为,我完全无法理解Terraform 1.9.0允许在变量验证中引用其他变量的意义。到底哪里出问题了?
补充说明:Schema文件的通用示例如下:
{ "type": "record", "namespace": "com.mycorp.mynamespace", "name": "sampleRecord", "doc": "Sample schema to help you get started.", "fields": [ ... ] }
内容的提问来源于stack exchange,提问作者Thomas Bakken Moe
相关产品推荐
相关产品推荐

