使用Terraform,我有一个定义为变量的映射列表。
storage_accounts = {
stacctest1 = {
resource_group_name = "testrg",
location = "uksouth",
account_tier = "Standard",
account_replication_type = "GRS",
containers_list = [
{ name = "test_private_x", access_type = "private" },
{ name = "test_blob_x", access_type = "blob" },
{ name = "test_container_x", access_type = "container" }
]
}
stacctest2 = {
resource_group_name = "testrg",
location = "uksouth",
account_tier = "Standard",
account_replication_type = "GRS",
containers_list = [
{ name = "test_private_a", access_type = "private" },
{ name = "test_blob_a", access_type = "blob" },
{ name = "test_container_a", access_type = "container" }
]
}
} 然后在一个模块中,我可以使用一个for_each循环来遍历列表中的每一项来创建每个存储帐户。
resource "azurerm_storage_account" "storage" {
for_each = var.storage_accounts
name = each.key
resource_group_name = each.value.resource_group_name
location = each.value.location
account_tier = each.value.account_tier
account_replication_type = each.value.account_replication_type
}
}为了处理映射中的容器序列,我在想,我可以通过列表循环再一次处理容器,但很难找到如何将嵌套的循环与资源"azurerm_storage_container“相匹配。
发布于 2022-08-10 11:05:41
你必须把压平你的变量。例如:
locals {
flat_storage_accounts = merge([
for account_name, details in var.storage_accounts: {
for container in details.containers_list:
"${account_name}-${container.name}" =>
merge(details, {
"account_name" = account_name
"container" = container
})
}
]...)
}然后
resource "azurerm_storage_account" "storage" {
for_each = local.flat_storage_accounts
name = each.account_name
resource_group_name = each.value.resource_group_name
location = each.value.location
account_tier = each.value.account_tier
account_replication_type = each.value.account_replication_type
# use individual container_list as
# some_attribute = each.value.container.access_type
}您还没有提供想要使用containers_list的代码,所以我只能在上面发表评论。
https://stackoverflow.com/questions/73304861
复制相似问题