如何在Terraform dynamic块中同时迭代exchange与preference参数
解决Terraform Dynamic块同时迭代多个参数的问题
要实现同时迭代exchange和preference参数,核心思路是把两个独立的列表合并成包含对应键值对的对象列表,让dynamic块一次迭代就能获取每个MX记录的完整参数。
具体实现步骤
1. 重构本地变量
将原来分开的mx_server和preference列表,合并为一个包含每个MX记录完整信息的对象列表:
locals { mx_records = [ { exchange = "smtp.mydomain.com.", preference = 5 }, { exchange = "mail.mydomain.com.", preference = 10 } ] }
如果需要基于原有两个列表动态配对(比如列表长度可能变化),可以用zip函数自动关联对应元素:
locals { mx_server = [ "smtp.mydomain.com.", "mail.mydomain.com."] preference = [ 5, 10 ] # 自动配对两个列表的对应元素,生成对象列表 mx_records = [for pair in zip(local.mx_server, local.preference) : { exchange = pair[0] preference = pair[1] }] }
2. 修改Dynamic块配置
让dynamic块迭代这个新的mx_records列表,在content块中直接提取每个对象的exchange和preference值:
resource "dns_mx_record_set" "mx" { for_each = toset(var.dns_zones) zone = "${each.value}." ttl = 300 dynamic "mx" { for_each = local.mx_records content { exchange = mx.value.exchange preference = mx.value.preference } } }
效果说明
修改后的代码会完全等价于你手动编写两个mx块的效果,每个MX记录的exchange和preference会正确对应,无需多次使用for_each。
内容的提问来源于stack exchange,提问作者tba
相关产品推荐
相关产品推荐

