我试图使用一组容器计数来创建多个Azure存储帐户,但是由于有多个资源块,我无法实现。下面是我编写的代码,它在一个存储帐户中创建了多个容器。如何实现相同的目的,以便在不同的存储帐户中创建多个容器?
resource "azurerm_resource_group" "rg" {
name = "test-rg"
location = "eastus"
}
variable "storageaccountname" {
type = string
default = "storageaccount1"
}
variable "containers_list" {
type = list
default = [{ name = "sa1container1", access_type = "private" }, {name = "sa1container2", access_type = "private" },{name = "sa1container3", access_type = "private" }]
}
resource "azurerm_storage_account" "storageaccount" {
name = var.storageaccountname
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "LRS"
}
resource "azurerm_storage_container" "container" {
count = length(var.containers_list)
name = var.containers_list[count.index].name
storage_account_name = azurerm_storage_account.storageaccount.name
container_access_type = var.containers_list[count.index].access_type
}发布于 2022-11-30 12:47:20
我尝试在我的环境中再现这个场景:
为存储和容器创建名称列表。
Variables.tf
variable "containers_list" {
type = list
default = [{ name = "sa1container1", access_type = "private" }, {name = "sa1container2", access_type = "private" },{name = "sa1container3", access_type = "private" }]
}
variable "Storage_list" {
type = list
default = ["sa1stor1", "sa1stor2","sa1stor3"]
}Main.tf
使用变量中列出的每个名称创建存储帐户
resource "azurerm_storage_account" "storage_account" {
// count = length(var.Storage_list)
//name = var.Storage_list[count.index].name
for_each = toset(var.Storage_list)
name=each.value
resource_group_name = data.azurerm_resource_group.example.name
location = data.azurerm_resource_group.example.location
account_tier = "Standard"
account_replication_type = "LRS"
}根据需要为存储帐户的每个值创建容器。
resource "azurerm_storage_container" "container" {
for_each = {for idx, val in local.flat_list: idx => val}
name = each.value[1].name
container_access_type = each.value[1].access_type
storage_account_name = azurerm_storage_account.storage_account[each.value[0]].name
}创建局部变量设置双循环产品
locals {
flat_list = setproduct(var.Storage_list, var.containers_list)
}根据需要为存储帐户的每个值创建容器。
resource "azurerm_storage_container" "container" {
for_each = {for idx, val in local.flat_list: idx => val}
name = each.value[1].name
container_access_type = each.value[1].access_type
storage_account_name = azurerm_storage_account.storage_account.each.value[0].name
}执行的代码:

根据变量数创建的存储帐户.

为每个存储帐户创建按变量集设置的3个容器。

参考:terraform-nested-for-each-loop-in-azure-storage-account | SO
https://stackoverflow.com/questions/74559414
复制相似问题