我们已经为给定的模块定义了变量。这是一个样本
variable "kv_name_solution" { }
variable "kv_name_seqnr" { }
variable "kv_name_purpose" { }
...
variable "location_name" { default = "Europe" }
variable "location_tier" { default = "Primary" }
variable "rg_name_solution" { default = "edw"}
variable "rg_name_seqnr" { default = "001"}在我们的tfvar中,准备了大量的kv。因此,在模板中,我们使用以下代码
module "kv_create" {
for_each = var.resources_kv
source = "../../_modules/security/kv_create"
kv_name_solution = each.value["kv_name_solution"]
kv_name_seqnr = each.value["kv_name_seqnr"]
kv_name_purpose = each.value["kv_name_purpose"]
...
location_name = each.value["location_name"]
location_tier = each.value["location_tier"]
rg_name_solution = each.value["rg_name_solution"]
rg_name_seqnr = each.value["rg_name_seqnr"]
}但是,我正在尝试找到一种方法,当在tfvar中,例如rg_name_solution和rg_name_seqnr被省略时,for_each中的代码仍然有效。我一直在尝试搜索,但到目前为止还没有找到正确的结果。
因为location_name = try(each.value["location_name"], null)似乎取消了我在变量上的默认设置。
有什么建议吗?
这些是“完整的文件”
terraform.tfvars
rg_resources = {
"edw-common" = {
rg_name_solution = "edw"
rg_name_seqnr = "001"
rg_location_name = "Europe"
rg_location_tier = "Primary"
}
}
kv_resources = {
"adf-001" = {
kv_name_solution = "edw"
kv_name_seqnr = "001"
kv_name_purpose = "adfxx"
}
}main.tf
....
module "provision_keyvaults" {
count = (var.MODULE == "KV") || ((var.MODULE == "ALL" && var.APPLY == "false")) ? 1 : 0
source = "./_templates/kv"
resources_kv = var.kv_resources
}
....template\kv\main.tf
module "kv_create" {
for_each = var.resources_kv
source = "../../_modules/security/kv_create"
kv_location_name = try(each.value["kv_location_name"],null)
kv_location_tier = try(each.value["kv_location_tier"],null)
kv_name_solution = each.value["kv_name_solution"]
kv_name_seqnr = each.value["kv_name_seqnr"]
kv_name_purpose = each.value["kv_name_purpose"]
rg_name_solution = try(each.value["rg_name_solution"],null)
rg_name_seqnr = try(each.value["rg_name_seqnr"],null)
}template\kv\variables.tf
variable "resources_kv" { }_modules\kv_create\variables.tf
variable "kv_location_name" {
default = "Europe"
}
variable "kv_location_tier" {
default = "Primary"
}
variable "kv_name_solution" { }
variable "kv_name_seqnr" { }
variable "kv_name_purpose" { }
variable "rg_name_solution" {
default = "edw"
}
variable "rg_name_seqnr" {
default = "001"
}_modules\kv_create\main.tf
module "subscription" {
source = "../../general/subscription_getdetails"
}
module "kv_location" {
source = "../../general/location_getdetails"
location_name = var.kv_location_name
location_tier = var.kv_location_tier
}
module "resourcegroup" {
source = "../../general/rg_getdetails"
rg_name_solution = var.rg_name_solution
rg_name_seqnr = var.rg_name_seqnr
}
data "azurerm_client_config" "current" {}
resource "azurerm_key_vault" "kv" {
count = var.kv_provision ? 1 : 0
name = "kv-${module.kv_location.sitecode}-${module.subscription.environment}-${var.kv_name_solution}-${var.kv_name_seqnr}-${var.kv_name_purpose}"
....
resource_group_name = module.resourcegroup.rg.name
location = module.kv_location.azure
...
}和底线,错误
╷
│ Error: Invalid template interpolation value
│
│ on _modules/general/rg_getdetails/main.tf line 18, in data "azurerm_resource_group" "rg":
│ 18: name = "rg-${module.subscription.environment}-${var.rg_name_solution}-${var.rg_name_seqnr}"
│ ├────────────────
│ │ var.rg_name_solution is null
│
│ The expression result is null. Cannot include a null value in a string
│ template.
╵发布于 2021-05-17 07:55:22
如果没有显式指定,我将只使用lookup来提供默认值。例如:
kv_name_solution = lookup(each.value, "kv_name_solution", var.kv_name_solution)
kv_name_seqnr = lookup(each.value, "kv_name_seqnr", var.kv_name_seqnr)
kv_name_purpose = lookup(each.value, "kv_name_purpose", var.kv_name_purpose)https://stackoverflow.com/questions/67554669
复制相似问题