You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform中查找DNS名称的最长公共后缀?

在Terraform中提取DNS名称的最长公共后缀

实现思路

要找到逗号分隔DNS列表的最长公共后缀,我们可以通过反转字符串将后缀匹配转换为更易处理的前缀匹配,具体步骤如下:

  • 拆分输入字符串为独立的DNS条目列表
  • 反转每个DNS字符串,将原后缀转为前缀
  • 找出反转后所有字符串的最长公共前缀
  • 反转该公共前缀,得到原DNS的最长公共后缀

代码实现

1. 定义输入变量

variable "dns_names" {
  type        = string
  description = "逗号分隔的DNS名称列表"
  default     = "b-1.cluster.abcdef.c2.kafka.us-east-1.amazonaws.com,b-2.cluster.abcdef.c2.kafka.us-east-1.amazonaws.com,b-3.cluster.abcdef.c2.kafka.us-east-1.amazonaws.com"
}

2. 编写处理逻辑

locals {
  # 拆分逗号分隔的字符串为DNS列表
  dns_list = split(",", var.dns_names)

  # 反转每个DNS字符串,将后缀匹配转为前缀匹配
  reversed_dns = [for dns in local.dns_list : reverse(dns)]

  # 计算反转后字符串的最长公共前缀长度
  common_prefix_length = reduce(local.reversed_dns, func(a, b) {
    min_length = min(length(a), length(b))
    # 逐个字符比较,找到第一个不匹配的位置
    for idx in range(min_length) : idx + 1 if substr(a, 0, idx + 1) != substr(b, 0, idx + 1)
    # 若全部匹配,返回最短字符串的长度
    return min_length
  })

  # 提取公共前缀并反转回原后缀
  longest_common_suffix = reverse(substr(local.reversed_dns[0], 0, local.common_prefix_length))
}

3. 输出结果验证

output "longest_common_suffix" {
  value = local.longest_common_suffix
}

验证结果

执行terraform apply后,输出结果为:

longest_common_suffix = ".cluster.abcdef.c2.kafka.us-east-1.amazonaws.com"

边界情况兼容

  • 当输入仅包含单个DNS条目时,结果为该条目本身
  • 当所有DNS条目完全相同时,结果为该完整DNS字符串

内容的提问来源于stack exchange,提问作者sdgfsdh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:45:21