使用默认函数时 Terraform 引用未声明的本地值
Terraform reference to undeclared local value when using defaults function
我想执行以下操作:
- 声明 3 个字段
private_dns_zone_id
、private_cluster_enabled
、public_network_access_enabled
及其所有环境的默认值 除了 一个
- 在异常环境中使用 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
我想执行以下操作:
- 声明 3 个字段
private_dns_zone_id
、private_cluster_enabled
、public_network_access_enabled
及其所有环境的默认值 除了 一个 - 在异常环境中使用 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