You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible 2.5.0 ios_user、ios_ping模块故障排查求助

Ansible IOS模块报错排查求助

我在编写Ansible Playbook时突然遇到Module Error,折腾了半天定位不到原因。已经单独在CLI测试各模块及所有选项,执行语法检查(--syntax-check)也没问题,怀疑是模块兼容性Bug。

模块测试情况

正常运行的模块:ios_facts

执行命令:

$ ansible all -m ios_facts -i Resources/Inventory/hosts

返回结果:

10.20.30.111 | SUCCESS => {
"ansible_facts": { "ansible_net_all_ipv4_addresses": [ "10.20.30.111" ], "ansible_net_all_ipv6_addresses": [], "ansible_net_filesystems": [ "flash:" (...)
}

报错模块1:ios_ping

执行命令:

$ ansible all -m ios_ping -a"dest='1.1.1.1'" -i Resources/Inventory/hosts

返回错误:

10.20.30.111 | FAILED! => { "changed": false, "module_stderr": "Traceback (most recent call last):\n File "/tmp/ansible_WOH7nd/ansible_module_ios_ping.py", line 215, in \n main()\n File "/tmp/ansible_WOH7nd/ansible_module_ios_ping.py", line 151, in main\n success, rx, tx, rtt = parse_ping(stats)\n File "/tmp/ansible_WOH7nd/ansible_module_ios_ping.py", line 200, in parse_ping\n return rate.group("pct"), rate.group("rx"), rate.group("tx"), rtt.groupdict()\nAttributeError: 'NoneType' object has no attribute 'group'\n", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1}

报错模块2:ios_user

返回错误:

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ASwitch#

10.20.30.111 | FAILED! => { "changed": false, "module_stderr": "Traceback (most recent call last):\n File "/tmp/ansible_UX9ZWc/ansible_module_ios_user.py", line 409, in \n main()\n File "/tmp/ansible_UX9ZWc/ansible_module_ios_user.py", line 382, in main\n have = map_config_to_obj(module)\n File "/tmp/ansible_UX9ZWc/ansible_module_ios_user.py", line 242, in map_config_to_obj\n data = get_config(module, flags=['| section username'])\n File "/tmp/ansible_UX9ZWc/ansible_modlib.zip/ansible/module_utils/network/ios/ios.py", line 117, in get_config\n File "/tmp/ansible_UX9ZWc/ansible_modlib.zip/ansible/module_utils/connection.py", line 146, in rpc\nansible.module_utils.connection.ConnectionError: show running-config | section username\r\n ^\r\n% Invalid input detected at '^' marker.\r\n\r\nASwitch#\n", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1 }

环境信息

  • Ansible版本:2.5.0
  • Cisco IOS版本:12.2(55)SE
  • 设备连接正常,ios_system模块可正常执行

请问该如何排查此问题?


我的分析与排查建议

1. 先解决ios_user的报错(最明确的原因)

从错误日志一眼就能看出来:Ansible在设备上执行show running-config | section username被拒绝了——你的IOS版本12.2(55)SE根本不支持| section这个管道命令!这个过滤命令是IOS 12.4T及以后才引入的老版本只能用| include或者手动筛选输出。

解决思路:

  • 能升级IOS的话,直接升到12.4T或更高版本,原生支持| section;
  • 没法升级的话,要么先用ios_command模块替代ios_user,手动执行show running-config | include username来获取用户配置,再自己处理用户管理逻辑;要么升级Ansible到更高版本(比如2.9+),新版本的IOS模块会自动对老IOS做兼容,把section替换成include。

2. 再处理ios_ping的报错

这个错误是模块的正则匹配失败导致的:parse_ping函数没法匹配你设备返回的ping结果格式,正则表达式返回了None,然后调用group()方法就炸了。

原因就是你的老IOS版本输出的ping结果格式,和Ansible 2.5.0里ios_ping模块预期的格式不一样。比如老IOS的ping统计字段排版、关键字可能和模块预设的正则不匹配。

排查&解决步骤:

  • 手动在设备上执行ping 1.1.1.1,把完整输出复制下来;
  • 找到本地Ansible的ansible_module_ios_ping.py文件,查看parse_ping函数里的正则表达式,对比你的设备输出看哪里不匹配;
  • 最快的解决办法还是升级Ansible(2.9及以上版本的ios_ping对老IOS兼容性好很多),或者升级IOS让ping输出符合模块预期;如果不想升级,也可以自己修改模块里的正则表达式来适配你的设备输出。

3. 通用排查建议

  • 优先升级Ansible版本:你用的2.5.0是2018年的老版本了,很多IOS模块的兼容性问题在后续版本都修复了,先升到2.9.x这种稳定的旧版本,或者最新稳定版再测试;
  • 查模块兼容性文档:去Ansible官方文档确认每个模块支持的IOS版本,你用的2.5版本对IOS 12.2的支持本来就不完善;
  • 开启详细日志:执行命令时加-vvv参数,能看到模块和设备交互的全部细节,更容易定位问题;
  • 用ios_command做替代测试:对报错的模块,先用ios_command手动执行对应的命令,比如ansible all -m ios_command -a "ping 1.1.1.1" -i Resources/Inventory/hosts,看设备返回的结果是否符合预期,判断是模块适配问题还是设备本身的问题。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:30:36