Terraform 寻找一种更简洁的嵌套循环方法
正在寻找一种更干净/更可读的方式来实现Terraform中的嵌套循环。我将举例说明 假设角色的变量如下所示:Terraform 寻找一种更简洁的嵌套循环方法,terraform,hcl,Terraform,Hcl,正在寻找一种更干净/更可读的方式来实现Terraform中的嵌套循环。我将举例说明 假设角色的变量如下所示: variable "roles" { type = "list" default = [ { name = "LOADER" schemas = { RAW = ["USAGE", "ALL"] SRC =
variable "roles" {
type = "list"
default = [
{
name = "LOADER"
schemas = {
RAW = ["USAGE", "ALL"]
SRC = ["ALL"]
}
},
{
name = "USER"
schemas = {
RAW = ["DELETE", "OBJECT"]
SRC = ["USE"]
}
}
]
}
在此基础上,我想以一个字典列表结束,该列表如下所示:
output = [
{
"privilege" = "USAGE"
"role" = "LOADER"
"schema" = "RAW"
},
{
"privilege" = "ALL"
"role" = "LOADER"
"schema" = "RAW"
},
{
"privilege" = "ALL"
"role" = "LOADER"
"schema" = "SRC"
},
{
"privilege" = "DELETE"
"role" = "USER"
"schema" = "RAW"
},
{
"privilege" = "OBJECT"
"role" = "USER"
"schema" = "RAW"
},
{
"privilege" = "USE"
"role" = "USER"
"schema" = "SRC"
},
]
到目前为止我已经尝试过的方法(似乎有效,但我正在寻找一种更简洁/可读的方法):
本地人{
#FlatMapping到字典列表。每个dict的格式为{schema=,role=,privilege=}
key_val=[对于变量roles中的角色:[对于架构,角色[“架构”]中的权限]:{
角色=角色[“名称”]
模式=模式
特权=特权
}]]
other_key_val=[对于扁平化中的dict(local.key_val):[对于dict中的priv[“privilege”]:{
role=dict[“role”]
schema=dict[“schema”]
特权
}]]
}
输出“输出”{
值=展平(本地。其他\u键\u值)
}
我的主要目标是让其他人更好地理解可读的代码。考虑到我第一次在Terraform中使用循环,我无法判断我的实现是否被认为是可读的。也许这是一种更简单的方法来实现相同的结果:
locals {
roles = [
{
name = "LOADER"
schemas = {
RAW = ["USAGE", "ALL"]
SRC = ["ALL"]
}
},
{
name = "USER"
schemas = {
RAW = ["DELETE", "OBJECT"]
SRC = ["USE"]
}
}
]
out = flatten([
for item in local.roles: [
for schema, privileges in item.schemas: [
for privilege in privileges: {
role = item.name
privilege = privilege
schema = schema
}
]
]
])
}
locals {
roles = [
{
name = "LOADER"
schemas = {
RAW = ["USAGE", "ALL"]
SRC = ["ALL"]
}
},
{
name = "USER"
schemas = {
RAW = ["DELETE", "OBJECT"]
SRC = ["USE"]
}
}
]
out = flatten([
for item in local.roles: [
for schema, privileges in item.schemas: [
for privilege in privileges: {
role = item.name
privilege = privilege
schema = schema
}
]
]
])
}