如何通过. tfvar文件从核心模块到子模块动态传递值到terraform中的资源块。有2个模块1)核心模块和2)调用模块
resource "azurerm_virtual_network_gateway" "this" {
name = var.name
location = var.location
resource_group_name = var.rg
type = var.type
sku = var.sku
dynamic "ip_configuration" {
for_each = var.ip_config
content {
name = ip_configuration.value.name
public_ip_address_id = ip_configuration.value.address_id
subnet_id = ip_configuration.value.subnet_id
}
}
}
variable "ip_config" {
type = map(object({
name = string
address_id = string
subnet_id = string
}))
}
调用模块代码:
module "vnet_gw" {
source = ""
for_each = var.vnet_gw
name = each.value.name
.
.
.
ip_config = {
ipconfig_name = each.value.ip_config.ip_name
public_ip_address_id = each.value.ip_config.addr_id
subnet_id = each.value.ip_config.s_id
}
}
variable.tf file for the calling module.
ip_config = list(object({
ipconfig_name = string
public_ip_address_id = string
subnet_id = string
}))
传递值的tf var文件。ip部分需要添加多个部分。
vnet_gw {
"vnet1" = {
name : ""
rg : ""
.
.
.
ip_config = {
"ip_1" : {
ip_name = "test1"
addr_id = "<id>"
s_id = "<id>"
},
"ip_2" : {
ip_name = "test2"
addr_id = "<id>"
s_id = "<id>"
}
}
}
}
如何获得执行计划的以下错误
在www.example.com行,模块"vnet_gw"中:main.tf line , in module "vnet_gw": each.value.ip_config is map of object with 2 elements This map does not have an element with the key "ip_name" similar for public address id and subnet_id
1条答案
按热度按时间vddsk6oq1#
在使用for_each循环时会出现一些基本的语法错误。当你将对象Map传递给任何调用模块时,注意这些变量的索引是很重要的。在你的例子中,调用模块看起来像这样:
注意,这里你引用了一个有两个对象的Map,所以通过引用
each.value.ip_config.ip_name
中的ip_name
,你就指定了这个Map中只有一个ip_config
对象,这是错误的。像这样引用对象可以解决您的问题。