如何从Ansible输出中捕获FQDN与IP地址变量?
从Ansible dig输出中批量提取FQDN与IP地址
问题场景
批量查询DNS记录时,需要从dig命令的输出中提取原始FQDN、对应的CNAME(若存在)及IP地址,输出格式要求类似:
www.facebook.com - star-mini.c10r.facebook.com. 157.240.202.35
解决方案
执行DNS查询并捕获结果
先通过command模块执行dig命令,用register捕获所有查询结果:- name: 批量查询DNS记录 command: dig +short {{ item }} loop: - www.facebook.com - www.google.com - www.github.com register: dns_query_results格式化提取并输出
遍历捕获的结果集,根据dig输出的行内容(stdout_lines)进行判断,分场景格式化输出:- name: 格式化输出FQDN与对应地址 debug: msg: > {% if item.stdout_lines | length >= 2 %} {{ item.item }} - {{ item.stdout_lines[0] }} {{ item.stdout_lines[1:] | join('\n') }} {% else %} {{ item.item }} {{ item.stdout_lines | join('\n') }} {% endif %} loop: "{{ dns_query_results.results }}"
关键说明
item.item:对应loop中传入的原始FQDN(如www.facebook.com)item.stdout_lines:dig命令的输出按行拆分后的列表,dig +short会将CNAME放在首行,后续行是对应IP- 条件判断处理两种场景:存在CNAME+IP的记录、仅存在IP的记录
- 若单域名对应多个IP,
stdout_lines[1:] | join('\n')会将所有IP逐行输出
内容的提问来源于stack exchange,提问作者SJS
相关产品推荐
相关产品推荐

