如何在Ansible中通过正则匹配从ELB DNS名称提取ELB名称
从ELB DNS名称提取ELB名称的Ansible实现
要从给定的ELB DNS名称中提取目标ELB名称,需要处理三个核心环节:移除前缀标识、截断末尾的随机数字段、将哈希部分转为大写。以下是两种可行的实现方案:
方案一:正则表达式一步完成
利用regex_replace过滤器结合正则匹配,直接定位并转换需要保留的内容:
set_fact: elb_dns: "internal-synergy-so-synergyin-883nxyin6e2o-278193237.us-west-2.elb.amazonaws.com." elb_name: "{{ elb_dns | regex_replace('^internal-(.+)-\\d+\\..*$', '\\1') | regex_replace('(-[a-z0-9]+)$', '\\U\\1') }}" tags: - always
正则逻辑说明
^internal-(.+)-\d+\..*$:匹配开头的internal-前缀,捕获中间到-数字.之前的所有内容,自动忽略后续域名后缀\U\1:将捕获的最后一段小写哈希字符串转为大写
方案二:分步拆分处理(可读性更强)
如果觉得正则过于紧凑,可拆分为多步骤处理,逻辑更清晰:
set_fact: elb_dns: "internal-synergy-so-synergyin-883nxyin6e2o-278193237.us-west-2.elb.amazonaws.com." # 第一步:拆分DNS,提取第一个点分隔的核心前缀 dns_core: "{{ elb_dns.split('.')[0] }}" # 第二步:移除开头的internal-,再去掉最后一段随机数字 elb_base_part: "{{ dns_core | regex_replace('^internal-', '') | split('-')[:-1] | join('-') }}" # 第三步:提取哈希段并转大写,再拼接最终名称 elb_hash_part: "{{ dns_core.split('-')[-2] | upper }}" elb_name: "{{ elb_base_part }}-{{ elb_hash_part }}" tags: - always
验证结果
两种方案处理后,均可得到目标结果:synergy-so-synergyin-883NXYIN6E2O
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

