如何解决Terraform 循环数据到动态块
我正在构建一个 azure 模块来创建一个应用程序网关。这个模块看起来像这样:
resource "azurerm_application_gateway" "app_gateway" {
....
dynamic "backend_address_pool" {
for_each = var.backend_address_pools
content {
name = backend_address_pool.value.name
ip_addresses = lookup(backend_address_pool.value,"ip_addresses",null)
fqdns = lookup(backend_address_pool.value,"fqdns",[])
}
}
dynamic "backend_http_settings" {
for_each = var.backend_http_settings
content {
name = backend_http_settings.value.name
cookie_based_affinity = backend_http_settings.value.cookie_based_affinity
port = backend_http_settings.value.port
protocol = backend_http_settings.value.protocol
request_timeout = backend_http_settings.value.request_timeout
path = lookup(backend_http_settings.value,"path",null)
probe_name = lookup(backend_http_settings.value,"probe_name",null)
host_name = backend_http_settings.value.pick_host_name_from_backend_address ? null : backend_http_settings.value.host_name
pick_host_name_from_backend_address = lookup(backend_http_settings.value,"pick_host_name_from_backend_address",false)
affinity_cookie_name = lookup(backend_http_settings.value,"affinity_cookie_name",null)
trusted_root_certificate_names = lookup(backend_http_settings.value,"trusted_root_certificate_names",[])
}
}
}
...
此代码适用于输入变量,如大多数模块示例所示:
backend_address_pools = [
{
name = local.ui-beap
ip_addresses = null
fqdns = ["UI_URL"]
},{
name = local.api-beap
ip_addresses = null
fqdns = ["API_URL"]
}
]
backend_http_settings = [
{
name = local.ui-htst
path = "/"
protocol = "https"
request_timeout = 30
probe_name = null
},{
name = local.api-htst
path = "/api/"
protocol = "https"
request_timeout = 30
probe_name = null
}
]
我有一个要求,其中变量以列表的形式提供。例如,不创建模块的代码如下所示:
resource "azurerm_application_gateway" "ampapplgateway" {
...
dynamic "backend_address_pool" {
for_each = var.host_a_hostnames
content {
name = "${local.host_a_backend_address_pool_name}${local.host_a_cluster ? "" : index(var.host_a_hostnames,backend_address_pool.value)}"
}
}
dynamic "backend_address_pool" {
for_each = var.host_b_hostnames
content {
name = "${local.host_b_backend_address_pool_name}${local.host_b_cluster ? "" : index(var.host_b_hostnames,backend_address_pool.value)}"
}
}
dynamic "backend_http_settings" {
for_each = var.host_a_hostnames
content {
cookie_based_affinity = "Enabled"
name = "${local.host_a_http_setting_name}${local.host_a_cluster ? "" : index(var.host_a_hostnames,backend_http_settings.value)}"
port = 8443
request_timeout = 30
protocol = "Https"
affinity_cookie_name = "ApplicationGatewayAffinity"
authentication_certificate {
name = local.host_a_auth_certificate_name
}
}
}
dynamic "backend_http_settings" {
for_each = var.host_b_hostnames
content {
cookie_based_affinity = "Enabled"
name = "${local.host_b_http_setting_name}${local.host_b_cluster ? "" : index(var.host_b_hostnames,backend_http_settings.value)}"
port = 8443
request_timeout = 30
protocol = "Https"
affinity_cookie_name = "ApplicationGatewayAffinity"
authentication_certificate {
name = local.host_b_auth_certificate_name
}
}
}
我正在尝试以单个和多个主机名可以协同工作的方式构建此模块。我正在努力解决这个问题,但我不知道如何解决这个问题。
非常感谢任何帮助!!提前致谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。