You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:06:06