Terraform嵌套动态块



我正在尝试在Terraform中部署Azure应用程序网关,特别是我需要创建一个嵌套的动态块。

我已经尝试实现这个(这部分代码在一个名为application_gateway.tf的文件中):

dynamic "url_path_map" {
for_each = var.path_maps
content {
name                               = outer_block.value["name"]
default_backend_address_pool_name  = outer_block.value["backend"]
default_backend_http_settings_name = outer_block.value["backend_set"]
dynamic "url_path_rule" {
for_each = url_path_map.value["upm"]
content{
name                       = url_path_rule.value["name_rule"]
paths                      = url_path_rule.value["path"]
backend_address_pool_name  = url_path_rule.value["backend"]
backend_http_settings_name = url_path_rule.value["backend_set"]
} 
}
} 
}

对应的变量。

variable "path_maps" {
default = []
type = list(object({
name = string
backend = string
backend_set = string
upm = list(object({
name_rule = string
path = string
backend = string
backend_set = string
}))
}))
}

使用以下模块调用(脚本的这一部分位于另一个名为main.tf的文件中):

module "application_gateway" {
source = "../modules/resources-hub/application_gateway"
resource_group_name        = module.resource_group.name
resource_group_location    = module.resource_group.location
subnet_id                  = module.agw_subnet.id
public_ip_address_id       = module.app_gw_pip.id
firewall_policy_id         = module.agw_web_application_firewall.id
log_analytics_workspace_id = module.log_analytics_workspace.id

path_maps = [{name = "dev_url_path_name", backend = "devBackend", backend_set = "devHttpSetting", name_rule = "dev_path_rule_name_app", path = "/app/*"},
{name = "tst_url_path_name", backend = "tstBackend", backend_set = "tstHttpSetting", name_rule = "dev_path_rule_name_edp", path = "/edp/*"},
{name = "uat_url_path_name", backend = "uatBackend", backend_set = "uatHttpSetting", name_rule = "dev_path_rule_name_internal", path = "/internal/*"}]
}

最后,我想获得的是使用嵌套的动态块:

url_path_map {
name      = "dev_url_path_name"
default_backend_address_pool_name = "devBackend"
default_backend_http_settings_name = "devHttpSetting"
path_rule {
name = "dev_path_rule_name_app_edp"
paths = ["/app/*"]
backend_address_pool_name = "devBackend"
backend_http_settings_name = "devHttpSetting"
}
path_rule {
name = "dev_path_rule_name_internal"
paths = ["/edp/*"]
backend_address_pool_name = "devBackend"
backend_http_settings_name = "devHttpSetting"
}
path_rule {
name = "dev_path_rule_name_internal"
paths = ["/internal/*"]
backend_address_pool_name = "sinkPool"
backend_http_settings_name = "devHttpSetting"
}
}

这是我得到的错误,如果我运行"terraform validate":

输入图片描述

提前感谢!

我已经尝试了上面的代码,但是我在图像中得到了错误。

第一个问题是关于变量"path_map "的定义,因为它与您传递给模块的path_maps格式不同。

你可以在path_maps传递给模块之前用正确的格式修改它,或者你可以修改变量以适应你定义的格式。

这就是为什么你会得到错误" up"需要

最新更新