Terraform - 如何修改 Terraform 中的 map 对象?

标签 terraform

我有一个格式的 map :

datasets   = {
  test = {
    access = [
      {
        role = "OWNER"
        group_by_email = "grp-owner"
      },
      {
        role = "READER"
        group_by_email = "grp-reader"
      }
    ]
  }
  test2 = {
    access = [
      {
        role = "OWNER"
        group_by_email = "grp-owner"
      },
      {
        role = "WRITER"
        group_by_email = "grp-writer"
      }
    ]
  }
}

我正在寻找一种更新 map (datasets/{dataset_name}/access/group_by_email)以添加域名的方法:

datasets   = {
  test = {
    access = [
      {
        role = "OWNER"
        group_by_email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8deafffda0e2fae3e8ffcdf9e8fef9a3eee2e0" rel="noreferrer noopener nofollow">[email protected]</a>"
      },
      {
        role = "READER"
        group_by_email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6e091c1e431c0b0f0a0b1c2e1a0b1d1a400d0103" rel="noreferrer noopener nofollow">[email protected]</a>"
      }
    ]
  }
  test2 = {
    access = [
      {
        role = "OWNER"
        group_by_email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2c4b5e5c01435b42495e6c58495f58024f4341" rel="noreferrer noopener nofollow">[email protected]</a>"
      },
      {
        role = "WRITER"
        group_by_email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="492e3b39643e3b203d2c3b093d2c3a3d672a2624" rel="noreferrer noopener nofollow">[email protected]</a>"
      }
    ]
  }
}

最佳答案

您可以按如下方式执行此操作:


variable "datasets" {
  default   = {
    test = {
      access = [
        {
          role = "OWNER"
          group_by_email = "grp-owner"
        },
        {
          role = "READER"
          group_by_email = "grp-reader"
        }
      ]
    }
    test2 = {
      access = [
        {
          role = "OWNER"
          group_by_email = "grp-owner"
        },
        {
          role = "WRITER"
          group_by_email = "grp-writer"
        }
      ]
    }
  }
}

locals {
  modified = { for k1, v1 in var.datasets:
                k1 => {access = [
                          for access in v1["access"]:  
                           merge(access, {group_by_email = "${access.group_by_email}@test.com"})
                         ]
                      }
             }
}

结果是:

 {
  "test" = {
    "access" = [
      {
        "group_by_email" = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="197e6b6934766e777c6b596d7c6a6d377a7674" rel="noreferrer noopener nofollow">[email protected]</a>"
        "role" = "OWNER"
      },
      {
        "group_by_email" = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5f382d2f722d3a3e3b3a2d1f2b3a2c2b713c3032" rel="noreferrer noopener nofollow">[email protected]</a>"
        "role" = "READER"
      },
    ]
  }
  "test2" = {
    "access" = [
      {
        "group_by_email" = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="90f7e2e0bdffe7fef5e2d0e4f5e3e4bef3fffd" rel="noreferrer noopener nofollow">[email protected]</a>"
        "role" = "OWNER"
      },
      {
        "group_by_email" = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5e392c2e73292c372a3b2c1e2a3b2d2a703d3133" rel="noreferrer noopener nofollow">[email protected]</a>"
        "role" = "WRITER"
      },
    ]
  }
}

关于Terraform - 如何修改 Terraform 中的 map 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71823530/

相关文章:

terraform - 如何引用由 Terraform 模块创建的资源

json - 如何传递 AWS Step Functions 状态机的混合参数

terraform - 如何从 terraform state show 中提取数据

azure - 应用服务 azurerm_monitor_autoscale_setting

azure - Terraform - Azure 标签格式化问题

terraform - 为什么我在 Terraform 中收到 random_id b64 属性的错误?

terraform - 如何修复 "count"对象只能在 "module"、 "resource"和 "data" block 中使用,并且仅当 "count"参数时

amazon-web-services - 指标过滤器未分配给指标警报

google-cloud-platform - Terraform 和 GCP : Google kubernetes cluster problem: Can't see monitoring section (memory and cpu) inside workloads (deployments, 状态集)

postgresql - 了解 Postgres provider/terraform registry - 升级 v0.13