首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问Terraform中for_each循环中映射中的序列

如何访问Terraform中for_each循环中映射中的序列
EN

Stack Overflow用户
提问于 2022-08-10 10:43:54
回答 1查看 136关注 0票数 0

使用Terraform,我有一个定义为变量的映射列表。

代码语言:javascript
复制
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循环来遍历列表中的每一项来创建每个存储帐户。

代码语言:javascript
复制
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“相匹配。

EN

回答 1

Stack Overflow用户

发布于 2022-08-10 11:05:41

你必须把压平你的变量。例如:

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

然后

代码语言:javascript
复制
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的代码,所以我只能在上面发表评论。

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

https://stackoverflow.com/questions/73304861

复制
相关文章

相似问题

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