如何在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
相关产品推荐
相关产品推荐

