Terraform 变量验证规则以意想不到的方式工作

问题描述 投票:0回答:1

我的问题

这是一个 Terraform 脚本:

provider "azurerm" {
  skip_provider_registration = true

  features {
  }
}

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=3.74.0"
    }
  }
}

variable "configurations" {
  type = map(string)
  default = {
    audit_log_enabled = "ON"
  }

  validation {
    condition     = contains(keys(var.configurations), "foo") || contains(keys(var.configurations), "bar")
    error_message = "'foo' or 'bar' are not taken into account."
  }
}

运行时,例如我启动 terraform console,我收到以下消息:

│ 错误:变量值无效 │ │ test.tf 第 17 行: │ 17: 变量“配置”{ │ ├──────────────── │ │ var.configurations 是具有 1 个元素的字符串映射 │ │ 'foo' 或 'bar' 不被考虑在内 帐户。 │ │ 这是通过验证规则检查的 测试.tf:28,3-13.

期待什么

由于我没有使用 foo ,所以我不应该收到此消息。

但是如果我默认:

  default = {
    audit_log_enabled = "ON"
    foo               = "123"
  }

我没有消息。

我需要什么

  • 发生了什么事?
  • 如何仅在 configurations 定义了 foo 或 bar 项时才获得验证消息?

谢谢你

terraform
1个回答
0
投票

我认为您正在寻找的正确验证表达式如下:

variable "configurations" {
  type = map(string)
  default = {
    audit_log_enabled = "ON"
  }

  validation {
    condition     = !contains(keys(var.configurations), "foo") && !contains(keys(var.configurations), "bar")
    error_message = "'foo' or 'bar' are not taken into account."
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.