amazon-web-services - 嵌套对象上的 Terraform 循环
问题描述
假设我有以下本地本地:
locals {
domains = [
"site01.example.com",
"site02.example.com",
]
}
正在为每个域创建一个证书,该证书返回 DNS 验证选项:
resource "aws_acm_certificate" "lps-certificate" {
for_each = local.domains
...
}
到目前为止,我能够创建以下本地:
locals {
records = {
for domain in local.domains : domain => {
for dvo in aws_acm_certificate.lps-certificate[domain].domain_validation_options : dvo.domain_name => {
name = dvo.resource_record_name
record = dvo.resource_record_value
type = dvo.resource_record_type
}
}
}
}
返回:
{
site01.example.com = {
*.site01.example.com = {
name = (known after apply)
record = (known after apply)
type = (known after apply)
}
site01.example.com = {
name = (known after apply)
record = (known after apply)
type = (known after apply)
}
}
site02.example.com = {
*.site02.example.com = {
name = (known after apply)
record = (known after apply)
type = (known after apply)
}
site02.example.com = {
name = (known after apply)
record = (known after apply)
type = (known after apply)
}
}
}
有没有办法让它看起来像这样:
{
*.site01.example.com = {
name = (known after apply)
record = (known after apply)
type = (known after apply)
}
site01.example.com = {
name = (known after apply)
record = (known after apply)
type = (known after apply)
}
*.site02.example.com = {
name = (known after apply)
record = (known after apply)
type = (known after apply)
}
site02.example.com = {
name = (known after apply)
record = (known after apply)
type = (known after apply)
}
}
解决方案
除非我误解了这个问题,否则您希望获得的表格可以使用values
,merge
和参数扩展生成:
merge(values(local.records)...)
我没有你的数据结构,所以我测试如下:
variable "records" {
default = {
"site01.example.com" = {
"*.site01.example.com" = {
name = "(known after apply)"
record = "(known after apply)"
type = "(known after apply)"
}
"site01.example.com" = {
name = "(known after apply)"
record = "(known after apply)"
type = "(known after apply)"
}
}
"site02.example.com" = {
"*.site02.example.com" = {
name = "(known after apply)"
record = "(known after apply)"
type = "(known after apply)"
}
"site02.example.com" = {
name = "(known after apply)"
record = "(known after apply)"
type = "(known after apply)"
}
}
}
}
output "test" {
value = merge(values(var.records)...)
}
结果是(顺序不同,但我希望没关系):
test = {
"*.site01.example.com" = {
"name" = "(known after apply)"
"record" = "(known after apply)"
"type" = "(known after apply)"
}
"*.site02.example.com" = {
"name" = "(known after apply)"
"record" = "(known after apply)"
"type" = "(known after apply)"
}
"site01.example.com" = {
"name" = "(known after apply)"
"record" = "(known after apply)"
"type" = "(known after apply)"
}
"site02.example.com" = {
"name" = "(known after apply)"
"record" = "(known after apply)"
"type" = "(known after apply)"
}
}
推荐阅读
- powershell - 以固定长度的科学形式将浮点数转换为十进制数
- vb.net - SVG 转换的奇怪透明度问题
- angular - Angular DOMSanitizationService 未定义
- asp.net-core - HotChocolate GraphQL 在运行时添加类型扩展或模式
- reactjs - 开玩笑 setSystemTime 不适用于全局范围
- swiftui - 触发时查看不动画
- r - 计算不同时间点动物之间的距离
- python - 通过删除子字符串获得的最大成本
- zsh - 在交互式 shell 中关闭函数参数中的 ZSH glob 扩展
- google-chrome-extension - Manifest V3 上的外部脚本集成