Ansible如何从interf嵌套变量中提取ipv4地址与operstatus值
问题原因
- 第一,
interf是嵌套字典类型的变量,你使用的select('regex')过滤器仅适用于字符串列表或单个字符串,直接作用于字典不会返回任何匹配结果。 - 第二,你编写的正则
^address (.*)$完全不符合变量的结构,address是嵌套字典的键名,并不是字符串前缀,不存在匹配的可能。
正确提取方式
场景1:已知interf下的一级键为1
直接通过字典层级取值即可,示例代码:
- set_fact: # 提取ipv4地址 ipv4_addr: "{{ interf['1']['ipv4'][0]['address'] }}" # 提取operstatus值 oper_status: "{{ interf['1']['operstatus'] }}" - debug: msg: "IPv4地址是{{ ipv4_addr }},端口运行状态是{{ oper_status }}"
场景2:interf下的一级键是动态值、不固定
可以先把字典转为键值对列表,提取值后再取对应字段:
- set_fact: # 先取第一个接口的所有信息 first_interface: "{{ interf | dict2items | map(attribute='value') | first }}" - set_fact: ipv4_addr: "{{ first_interface['ipv4'][0]['address'] }}" oper_status: "{{ first_interface['operstatus'] }}" - debug: msg: "IPv4地址是{{ ipv4_addr }},端口运行状态是{{ oper_status }}"
内容的提问来源于stack exchange,提问作者perl
相关产品推荐
相关产品推荐

