繁体   English   中英

terraform 嵌套在 azure 存储帐户中的每个循环

[英]terraform nested for each loop in azure storage account

我想创建多个存储帐户,并在每个存储帐户中创建一些容器。 如果我想要 3 个存储帐户,我总是想在这 3 个存储帐户中创建容器 a 和容器 b

所以例如会。 存储帐户列表 ["sa1","sa2","sa3"]。

resource "azurerm_storage_account" "storage_account" {
  count = length(var.list) 
  name = var.name
  resource_group_name = module.storage-account-resource-group.resource_group_name[0]
  location = var.location
  account_tier = var.account_tier
  account_kind = var.account_kind
  

然后是容器块

resource "azurerm_storage_container" "container" {
  depends_on = [azurerm_storage_account.storage_account]
  count =  length(var.containers)
  name                  = var.containers[count.index].name
  container_access_type = var.containers[count.index].access_type
  storage_account_name  = azurerm_storage_account.storage_account[0].name

容器变量:

variable "containers" {
  type = list(object({
    name        = string
    access_type = string
  }))
  default     = []
  description = "List of storage account containers."
}

列表变量

variable "list" {
  type        = list(string)
  description = "the env to deploy. ['dev','qa','prod']"

此代码将仅在第一个存储帐户“sa1”中创建一个容器,而不在其他两个“sa2”和“sa3”中创建一个容器。 我读到我需要为每个使用 2 来迭代存储帐户和 continaers 列表,但不确定它的代码应该如何。

最好使用for_each

resource "azurerm_storage_account" "storage_account" {
  for_each = toset(var.list) 
  name = var.name
  resource_group_name = module.storage-account-resource-group.resource_group_name[0]
  location = var.location
  account_tier = var.account_tier
  account_kind = var.account_kind
}

那么你需要一个等效的for循环,你可以使用setproduct获得:

locals {
    flat_list = setproduct(var.list, var.containers)
}

然后将local.flat_list用于容器:

resource "azurerm_storage_container" "container" {
  for_each              = {for idx, val in local.flat_list: idx => val}
  name                  = each.value.name[1].name
  container_access_type = each.value.name[1].access_type
  storage_account_name  = azurerm_storage_account.storage_account[each.value[0]].name
}

ps 我还没有运行代码,因此它可能需要一些调整,但这个想法仍然有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM