terraform - Terraform 对象和嵌套循环
问题描述
我正在尝试转换 a map(object)
,但我觉得 Terraform 文档在涉及更复杂的循环用例时有点缺乏。
有没有人能够编写一个 for 循环,以便output.solution
等于local.desired_output
?
locals {
users = {
user1 = {
teams = {
team1 = "member"
team2 = "admin"
}
}
user2 = {
teams = {
team1 = "member"
}
}
}
desired_output = {
user1_team1 = {
user = "user1"
team = "team1"
role = "member"
}
user1_team2 = {
user = "user1"
team = "team2"
role = "admin"
}
user2_team1 = {
user = "user2"
team = "team1"
role = "member"
}
}
}
output "solution" {
value = ???
}
编辑:
找到了一个解决方案,但它很丑:
locals {
temp_output = flatten([
for user, data in local.users : [
for team, role in data.teams : {
join("-", [user, team]) = {
"user" = user
"team" = team
"role" = role
}
}
]
])
}
output "solution" {
value = {
for tuple in local.temp_output : keys(tuple)[0] => values(tuple)[0]
}
}
谁能建议一种更清洁的方法来做到这一点?
编辑2:
跟进 Martin Atkins 的评论,即清洁度是主观的:我不喜欢我的解决方案是它需要我将循环包裹在各种括号中,然后使用另一个循环解包它们。我想做的是直接从嵌套循环创建我想要的输出,而不需要创建元组列表的中间步骤。
如果它有效,这样的东西会更干净:
# Does not work
output = {
for user, data in local.users :
for team, role in data.teams :
join("-", [user, team]) => {
"user" = user
"team" = team
"role" = role
}
}
我不完全理解为什么上述方法不起作用;[]
除非内部循环包含在or中,否则您似乎无法执行嵌套循环{}
,这随后需要更多代码来解包以达到for_each
友好的对象结构。
解决方案
推荐阅读
- vba - VBA将图片插入表格的特定列
- django - 创建一个可以有两种类型之一的 Django 模型
- google-analytics - 我想从 Google Analytics 对象(GA 对象)获取城市、国家、州
- log4net - log4net - 指定要创建的文件。不要创建所有附加程序
- android - BottomSheetDialogFragment 暴露高度
- php - 我的本地主机中的 .htaccess 出现问题,无法正确重定向
- mongodb - 无法将 Azure Functions 连接到 MongoDB(在 azure 中创建)
- docker - 是否可以在 Windows 10 和 Docker 上使用 VirtualBox 运行 Minikube?
- mysql - FlywaySqlException:无法在模式历史记录表“schema_version”中插入版本“11”的行:字段“version_rank”没有默认值
- angular - Angular - PrimeNG 与分页中的行数不一致