首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用terraform中的特定容器计数创建多个存储帐户

如何使用terraform中的特定容器计数创建多个存储帐户
EN

Stack Overflow用户
提问于 2022-11-24 10:41:25
回答 1查看 51关注 0票数 0

我试图使用一组容器计数来创建多个Azure存储帐户,但是由于有多个资源块,我无法实现。下面是我编写的代码,它在一个存储帐户中创建了多个容器。如何实现相同的目的,以便在不同的存储帐户中创建多个容器?

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-30 12:47:20

我尝试在我的环境中再现这个场景:

为存储和容器创建名称列表。

Variables.tf

代码语言:javascript
复制
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

使用变量中列出的每个名称创建存储帐户

代码语言:javascript
复制
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"
}

根据需要为存储帐户的每个值创建容器。

代码语言:javascript
复制
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
}

创建局部变量设置双循环产品

代码语言:javascript
复制
locals {
    flat_list = setproduct(var.Storage_list, var.containers_list)
}

根据需要为存储帐户的每个值创建容器。

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74559414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档