如何在Ansible中提取IP地址并将其注册为变量
在Ansible中提取并注册目标IP地址
一、正则替换方法
方法1:匹配前缀内容替换
通过regex_replace过滤器匹配并移除目标字符串前的所有内容:
- name: 提取IP地址 set_fact: target_ip: "{{ command_output.stdout | regex_replace('^.*has address ', '') }}"
正则^.*has address 会匹配从字符串开头到has address 的全部内容,替换为空后即可得到IP地址。
方法2:直接匹配IP格式提取
使用regex_findall精准匹配IP格式,即使前缀内容变化也能生效:
- name: 提取IP地址 set_fact: target_ip: "{{ command_output.stdout | regex_findall('\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b') | first }}"
该正则会找出字符串中所有符合IPv4格式的内容,通过first取第一个结果(即目标IP)。
二、其他可行方法
方法1:字符串分割取最后元素
利用空格分割字符串,直接取最后一个元素:
- name: 提取IP地址 set_fact: target_ip: "{{ command_output.stdout.split() | last }}"
原输出以空格分隔各字段,分割后的列表最后一项即为IP地址。
方法2:直接使用DNS lookup插件
如果是通过DNS解析获取IP,可直接用Ansible的dig lookup插件,无需处理命令输出:
- name: 获取并注册IP地址 set_fact: target_ip: "{{ lookup('dig', 'fepv-lnxiaas-s4.fepoc.com') }}"
内容的提问来源于stack exchange,提问作者Ryan Curtis
相关产品推荐
相关产品推荐

