【发布时间】:2021-09-02 10:39:33
【问题描述】:
我正在尝试使用terraform 创建一个azure 应用程序网关,我的代码如下所示:
main.tf
# Create Application Gateway
resource "azurerm_application_gateway" "app_gateway" {
name = var.name
resource_group_name = var.appg_name
location = var.appg_location
.
.
.
# backend_address_pool {
# name = var.backend_address_pool_name
# }
dynamic "backend_address_pool" {
for_each = var.backend_pools
content {
name = backend_pools.value["name"]
fqdns = backend_pools.value["fqdns"]
ip_addresses = backend_pools.value["ip_addresses"]
}
}
backend_http_settings {
name = var.http_setting_name
cookie_based_affinity = var.cookie_based_affinity
path = var.backend_http_settings_path
port = var.http_setting_port
protocol = var.http_setting_protocol
request_timeout = var.http_setting_request_time_out_value
}
.
.
.
}
这是我的variables.tf - 所有变量中只提到backend_pools
variable "backend_pools" {
type = list(map(string))
}
这是我的terraform.tfvars
backend_pools = [
{
name = "pool1"
fqdns = "fqdns1"
ip_addresses = "10.0.0.0"
},
{
name = "pool2"
fqdns = "fqdns2"
ip_addresses = "10.0.0.0"
},
{
name = "pool3"
fqdns = "fqdns3"
ip_addresses = "10.0.0.0"
},
]
我担心的是,根据terraform docs 提到fqdns 和ip_addresses 的数据类型都是list,那么我该如何更改我的variables.tf 和@987654335 @ 和 main.tf 相应地包含 dynamic 块。
我想要做的是,创建多个后端池并使用变量文件传递值,或者是否可以创建具有多个后端池的json 文件并将其传递给backend_pools 参数?
有人可以帮我解决这个问题吗?
【问题讨论】:
-
如果你尝试这样做,你会得到一个错误吗?如果将
fqdns和ip_addresses包裹在terraform.tfvars中的方括号中,如fqdns = ["fqdns1"],会发生什么? -
尝试配置时是否存在实际错误?我认为您的原始代码实际上看起来不错。如果你想设置一个变量约束,你可以试试
list(map(object(name = string fqdns = list(string) ip_addresses = list(string))))。您需要将每个对象设置为带有选项卡的新行,无法在此处的评论回复中真正格式化。
标签: terraform terraform-provider-azure azure-application-gateway