我尝试了几种方法来遍历 yaml 中的地图,但每个结果我都不断收到错误,例如:local.settings 是带有 # attributes 的对象。
从这里开始是我的 yaml 和 locals 设置
config:
params:
server:
host: 127.0.0.1
port: 8080
media:
name: foobar
type: html
s3:
bucket: foobarbucket
uploadFolder: folderfoobar
type:
public: false
email:
to: noreply@foobar.com
locals {
settings = yamldecode(file("test.yaml"))
}
module "store_write" {
source = "cloudposse/ssm-parameter-store/aws"
for_each = local.settings.variables
parameter_write = [
{
name = "/settings/${each.key}(i need each param key name ex: server)/${each.key.NEXTKET}(then the following key name after ex:host)"
value = "${each.key.value}(that keys value, ex: 127.0.0.1)"
type = "String"
overwrite = "true"
description = "Terraform deployed param: ${local.app_name} ${each.key}"
}
]
}
现在我当然会得到从 yaml 文件中解码的内容的输出,但是我尝试的每个 for 循环都不起作用。在这一点上,我什至找不到足够干净的 1 可以粘贴在这里。我不认为我可以实现我需要的,如果有时关键名称例如:s3 或电子邮件随着时间的推移而改变,对吗?
也注意到有时我可能会得到 3 个级别,
config:
params:
s3:
bucket: foobarbucket
uploadFolder: folderfoobar
type:
public: false
我进一步尝试了以下操作,不得不稍微编辑 yaml 文件。但现在我得到了重复
locals {
params = yamldecode(file("./test.yaml"))["app"]
folder_project_apis = flatten([
for fk, param in local.params : [
for pk, config in param.params : [
for lk, name in config : [
for vk, value in config : {
key1 = fk
key2 = pk
key3 = lk
value = value
}
]
]
]
])
}
使用新的 yaml 结构
app:
testing: #fk
display_name: "Folder A"
parent:
params:
server: #pk
host:
- 127.0.0.1
port:
- 3000
s3:
layout:
- "uploads"
image:
- "total"
输出
> local.folder_project_apis
[
{
"key1" = "testing"
"key2" = "s3"
"key3" = "image"
"value" = [
"total",
]
},
{
"key1" = "testing"
"key2" = "s3"
"key3" = "image"
"value" = [
"uploads",
]
},
{
"key1" = "testing"
"key2" = "s3"
"key3" = "layout"
"value" = [
"total",
]
},
{
"key1" = "testing"
"key2" = "s3"
"key3" = "layout"
"value" = [
"uploads",
]
},
{
"key1" = "testing"
"key2" = "server"
"key3" = "host"
"value" = [
"127.0.0.1",
]
},
{
"key1" = "testing"
"key2" = "server"
"key3" = "host"
"value" = [
3000,
]
},
{
"key1" = "testing"
"key2" = "server"
"key3" = "port"
"value" = [
"127.0.0.1",
]
},
{
"key1" = "testing"
"key2" = "server"
"key3" = "port"
"value" = [
3000,
]
},
]