terraform 从 yaml 创建列表以用于 subject_alternative_names
terraform create list from yaml to be used in subject_alternative_names
我有这个 yaml 结构,我需要 terraform 来放置 apex_name 并将每个记录条目存储在一个列表中,然后我可以用它来创建一个 san 证书。我如何才能将此列表设为 subject_alternative_names 的平面列表?非常感谢任何帮助。
source_domains:
- apex_name: elastic2ls.com
records:
- elastic2ls.com
- www.elastic2ls.com
- apex_name: elastic2ls.ch
records:
- elastic2ls.ch
- www.elastic2ls.ch
- image.elastic2ls.ch
- m.elastic2ls.ch
- static.elastic2ls.ch
resource "aws_acm_certificate" "cert" {
for_each = var.subdomains
provider = aws.certificate_region
domain_name = var.target_domain
subject_alternative_names = sort(each.value)
validation_method = "DNS"
}
variable "source_domains" {
type = set(object({
apax_name = string
records = set(string)
}))
}
将您的 yml 加载到本地值中,然后使用 for 语句将其修改为适合您的用例的内容:
locals {
source_domains = yaml_decode(file("myYaml.yml"))
}
resource "aws_acm_certificate" "cert" {
for_each = tomap({ for d in local.source_domains :
d.apex_name => d })
provider = aws.certificate_region
domain_name = each.key
subject_alternative_names = sort(flatten([each.key, each.value.records]))
validation_method = "DNS"
}
我假设您想使用 apex_name
作为您的域名,apex_name
是正确的值,而 apax_name
是一个拼写错误。
我能够使用此 terraform 代码将所有域名放入 SAN 证书。
locals {
subject_alternative_names = flatten([
for d in var.source_domains :
contains(keys(d), "records") ? d.records: null
])
}
resource "aws_acm_certificate" "cert" {
provider = aws.certificate_region
domain_name = var.target_domain
subject_alternative_names = local.subject_alternative_names
validation_method = "DNS"
}
variable "source_domains" {
type = set(object({
apex_name = string
records = set(string)
}))
}
我有这个 yaml 结构,我需要 terraform 来放置 apex_name 并将每个记录条目存储在一个列表中,然后我可以用它来创建一个 san 证书。我如何才能将此列表设为 subject_alternative_names 的平面列表?非常感谢任何帮助。
source_domains:
- apex_name: elastic2ls.com
records:
- elastic2ls.com
- www.elastic2ls.com
- apex_name: elastic2ls.ch
records:
- elastic2ls.ch
- www.elastic2ls.ch
- image.elastic2ls.ch
- m.elastic2ls.ch
- static.elastic2ls.ch
resource "aws_acm_certificate" "cert" {
for_each = var.subdomains
provider = aws.certificate_region
domain_name = var.target_domain
subject_alternative_names = sort(each.value)
validation_method = "DNS"
}
variable "source_domains" {
type = set(object({
apax_name = string
records = set(string)
}))
}
将您的 yml 加载到本地值中,然后使用 for 语句将其修改为适合您的用例的内容:
locals {
source_domains = yaml_decode(file("myYaml.yml"))
}
resource "aws_acm_certificate" "cert" {
for_each = tomap({ for d in local.source_domains :
d.apex_name => d })
provider = aws.certificate_region
domain_name = each.key
subject_alternative_names = sort(flatten([each.key, each.value.records]))
validation_method = "DNS"
}
我假设您想使用 apex_name
作为您的域名,apex_name
是正确的值,而 apax_name
是一个拼写错误。
我能够使用此 terraform 代码将所有域名放入 SAN 证书。
locals {
subject_alternative_names = flatten([
for d in var.source_domains :
contains(keys(d), "records") ? d.records: null
])
}
resource "aws_acm_certificate" "cert" {
provider = aws.certificate_region
domain_name = var.target_domain
subject_alternative_names = local.subject_alternative_names
validation_method = "DNS"
}
variable "source_domains" {
type = set(object({
apex_name = string
records = set(string)
}))
}