gpt4 book ai didi

terraform - 使用 terraform 将对象( map )转换为不同的列表

转载 作者:行者123 更新时间:2023-12-05 02:46:21 26 4
gpt4 key购买 nike

使用 Terraform,是否可以将对象转换成类似的东西

locals {
data = {
"project1" = {
user_assigned = ["user1", "user2", "user3"]
}
"project2" = {
user_assigned = ["user2", "user3", "user4"]
}
}

像这样的输出

user1 = ["project1"]
user2 = ["project1","project2"]
user3 = ["project1","project2"]
user4 = ["project2"]

请注意,数据是具有键(项目)和值(用户分配)映射的对象

最佳答案

这是另一种方法,我将分享它以防万一它很有趣——公认的答案也是一种很好的方法。

locals {
data = {
"project1" = {
user_assigned = ["user1", "user2", "user3"]
}
"project2" = {
user_assigned = ["user2", "user3", "user4"]
}
}

project_user = flatten([
for proj_name, proj in local.data : [
for username in proj.user_assigned : {
project_name = proj_name,
username = username
}
]
])
}

output "example" {
value = {
for pu in local.project_user :
pu.username => pu.project_name...
}
}
Outputs:

example = {
"user1" = [
"project1",
]
"user2" = [
"project1",
"project2",
]
"user3" = [
"project1",
"project2",
]
"user4" = [
"project2",
]
}

我通常使用这种方法,因为像中间 local.project_user 值这样的数据结构——这是一个包含每个项目/用户对的元素的列表——通常最终会有用在声明代表这些配对的资源时。

关于这些项目和用户代表什么或者他们可能与哪个提供商相关的问题没有任何上下文,所以我将使用 github_teamgithub_team_membership 举个例子来说明我的意思:

resource "github_team" "example" {
for_each = local.data

name = each.key
}

resource "github_team_membership" "example" {
for_each = {
for pu in local.project_user : "${pu.username}:${pu.project_name}" => pu
}

team_id = github_team.example[each.value.project_name].id
username = each.value.username
}

许多提供者都拥有代表两个对象之间关系的资源,因此拥有一个包含每对对象的元素的中间数据结构对于这些情况来说是一个有用的构建 block ,然后您可以从该映射中派生就像我在原始代码段中的 output "example" 中所做的那样。

关于terraform - 使用 terraform 将对象( map )转换为不同的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65544336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com