Ansible如何从ansible_net_config提取ip nbar配置行并设置为新变量
解决方案
使用regex_search过滤器即可实现需求,json_query适用于处理JSON结构化数据,而ansible_net_config是多行纯文本格式,并不适配该场景。
你之前的写法仅能匹配到ip nbar protocol-pack这个固定前缀,无法抓取整行内容,调整正则规则并开启多行匹配模式即可:
- 正则规则改为
^ip nbar protocol-pack.*$:^匹配行首位置,.*匹配前缀之后到行尾的所有内容,$匹配行尾位置 - 给
regex_search增加multiline=True参数,让^和$可以匹配每一行的首尾,而不是整个配置字符串的全局首尾
修改后的完整Playbook如下:
--- - name: Cisco NBAR Test connection: ansible.netcommon.network_cli hosts: all tasks: - name: collect facts cisco.ios.ios_facts: gather_subset: - config - name: set vars set_fact: config: "{{ ansible_net_config | regex_search('^ip nbar protocol-pack.*$', multiline=True) }}" - name: show output debug: var: config
如果部分设备的配置行前缀前可能存在前导空格,可以把正则调整为^\\s*ip nbar protocol-pack.*$适配该场景;如果设备存在多条匹配行,需要取第一条的话,在过滤器后追加| first即可。
内容的提问来源于stack exchange,提问作者Patrick Brown
相关产品推荐
相关产品推荐

