使用默认函数时 Terraform 引用未声明的本地值

Terraform reference to undeclared local value when using defaults function

我想执行以下操作:

  1. 声明 3 个字段 private_dns_zone_idprivate_cluster_enabledpublic_network_access_enabled 及其所有环境的默认值 除了 一个
  2. 在异常环境中使用 aks.auto.tfvars 并“覆盖”默认值。

但是,我收到如下错误消息:

│ Error: Reference to undeclared local value
│ 
│   on aks.tf line 10, in resource "azurerm_kubernetes_cluster" "myaks":
│   10:   private_cluster_enabled       = local.private_cluster_enabled
│ 
│ A local value with the name "private_cluster_enabled" has not been declared.

这是我的 tf 和 tfvars 文件的样子:

aks.tf

resource "azurerm_kubernetes_cluster" "global" {
  name                          = var.aks.name
  ...
  
  # values required to making AKS public / private
  private_dns_zone_id           = local.private_dns_zone_id
  private_cluster_enabled       = local.private_cluster_enabled
  public_network_access_enabled = local.public_network_access_enabled

  ...
}

aks.variables.tf

variable "aks" {
  description = "Azure Kubernetes Service Values"
  type = object({
    ...
    private_dns_zone_id           = optional(string)
    private_cluster_enabled       = optional(bool)
    public_network_access_enabled = optional(bool)
    ...
  })
}

locals {
  aks = defaults(var.aks, {
    private_dns_zone_id           = "System"
    private_cluster_enabled       = true
    public_network_access_enabled = false
  })
}

aks.auto.tfvars(针对“异常”环境)

aks = {
  private_dns_zone_id = ""
  private_cluster_enabled = false
  public_network_access_enabled = true
}

你只需要修复一件事:

private_cluster_enabled = local.aks.private_cluster_enabled

它应该可以工作。这是因为 map 类型的变量有一个键(或您的情况下的键)和一个值(或您的情况下的值)。要访问任何值,您必须指定变量名后跟键名。


[1] https://www.terraform.io/language/expressions/types#maps-objects