如何从Terraform的domain_lst变量中提取去重后的DNS值列表?
在Terraform中提取去重后的DNS值列表
你可以通过Terraform内置函数的组合来实现需求,核心用到values、map和distinct三个函数,具体实现如下:
代码示例
# 原变量定义 variable "domain_lst" { type = map(object({ dns = string })) default = { env1 = { dns = "application1.domain.com" } env2 = { dns = "application2.domain.com" } env3 = { dns = "application1.domain.com" } } } # 定义局部值处理去重逻辑 locals { unique_domains = distinct(map(var.domain_lst, _, __.dns)) } # 输出去重后的结果 output "unique_dns_list" { value = local.unique_domains }
逻辑拆解
values(var.domain_lst):将原map类型变量转换为包含所有子对象的列表,得到:[{dns = "application1.domain.com"}, {dns = "application2.domain.com"}, {dns = "application1.domain.com"}]map(..., _, __.dns):遍历上述列表,从每个子对象中提取dns字段的值,得到带重复项的域名列表:["application1.domain.com", "application2.domain.com", "application1.domain.com"]distinct():对提取后的列表进行去重,最终得到唯一域名列表。
注意:该方案要求Terraform版本在0.12及以上,这些函数从该版本开始支持。
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

