如何在Terraform中复用资源数据完成DNS资源配置关联?
字段复用实现方案
替换规则
由于两个资源的count均绑定length(var.datacenter),数组索引完全一一对应,可直接按相同count.index引用对应AAAA记录集的地址值。
因为addresses是列表类型,当前配置下每个记录集仅存储1个IPv6字符串,需要通过列表索引取出实际值,否则会触发类型不匹配报错。
最终name字段的正确取值为:dns_aaaa_record_set.app-stage-dns[count.index].addresses[0]
替换后完整Terraform配置
resource "dns_aaaa_record_set" "app-stage-dns" { count = length(var.datacenter) zone = format("%s.", var.dns_zone) name = "app-stage-${var.datacenter[count.index]}.mydomain" addresses = [replace(openstack_compute_instance_v2.app-stage[count.index].access_ip_v6, "/\\[|\\]/", "")] ttl = 300 } resource "dns_ptr_record" "app-stage-dns-ptr" { count = length(var.datacenter) zone = format("%s.", var.dns_ptr_zone) ptr = "app-stage-${var.datacenter[count.index]}.mydomain" name = dns_aaaa_record_set.app-stage-dns[count.index].addresses[0] ttl = 300 }
补充说明
- 若后续调整AAAA记录配置,单个记录集需要绑定多个IPv6地址,需要调整当前取
addresses[0]的逻辑,比如嵌套循环生成对应数量的PTR记录匹配所有地址。 - 若DNS服务提供商要求PTR记录的name为反向格式化的IP字符串,可在当前引用值基础上追加IP反转的转换逻辑即可,不需要修改核心引用关系。
内容的提问来源于stack exchange,提问作者user3297323
相关产品推荐
相关产品推荐

