我正在编写Ansible手册,突然间我开始收到“模块错误”,我不明白为什么。我在每个选项中都在CLI中单独尝试了每个模块。我运行了语法检查(--syntax-check
),没有问题。我认为这很不错。
“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:" (...)
“ios_ping”会返回此错误:
$ ansible all -m ios_ping -a"dest='1.1.1.1'" -i Resources/Inventory/hosts
10.20.30.111 |失败! => {“已更改”:false, “module_stderr”:“Traceback(最近一次调用最后一次):\ n File \”/ tmp / ansible_WOH7nd / ansible_module_ios_ping.py \“,第215行,位于\ n main()\ n File \”/ tmp / ansible_WOH7nd / ansible_module_ios_ping。 py \“,第151行,主要成功,rx,tx,rtt = parse_ping(stats)\ n文件\”/ tmp / ansible_WOH7nd / ansible_module_ios_ping.py \“,第200行,在parse_ping \ n中返回rate.group (\“pct \”),rate.group(\“rx \”),rate.group(\“tx \”),rtt.groupdict()\ n属性错误:'NoneType'对象没有属性'group'\ n “,”module_stdout“:”“,”msg“:”MODULE FAILURE“,”rc“:1}
“ios_user”返回此错误:
任务执行期间发生异常。要查看完整的回溯,请使用-vvv。错误是:ASwitch#
10.20.30.111 |失败! => { “改变了”:错误, “module_stderr”:“Traceback(最近一次调用最后一次):\ n文件\”/ tmp / ansible_UX9ZWc / ansible_module_ios_user.py \“,第409行,位于\ n main()\ n File \”/ tmp / ansible_UX9ZWc / ansible_module_ios_user。 py \“,第382行,在主\ n中= map_config_to_obj(模块)\ n文件\”/ tmp / ansible_UX9ZWc / ansible_module_ios_user.py \“,第242行,在map_config_to_obj \ n data = get_config(module,flags = [' | section username'])\ n文件\“/ tmp / ansible_UX9ZWc / ansible_modlib.zip / ansible / module_utils / network / ios / ios.py \”,第117行,在get_config \ n文件\“/ tmp / ansible_UX9ZWc / ansible_modlib .zip / ansible / module_utils / connection.py \“,第146行,在 rpc \ nansible.module_utils.connection.ConnectionError:show running-config | section username \ r \ n ^ \ r \ n %在'^'标记处检测到无效输入。\ r \ n \ r \ n \ n开关#\ n“, “module_stdout”:“”, “msg”:“MODULE FAILURE”, “rc”:1 }
IOS配置: config.text
Ansible Inventory: Resources/Inventory/hosts
Ansible版本: 2.5.0
Cisco IOS版本: 12.2(55)SE
连接正常,我也能够执行“ios_system”模块。你们有什么想法吗?
答案 0 :(得分:1)
第二个错误表明
show running-config | section username
不是您设备上的有效命令。你可以尝试手动运行它,很可能它也会失败。我猜你的IOS对于大多数ios_模块而言太旧或太新了(12.2-whatexactly你在运行吗?)。这也可以解释由于命令输出的差异而导致ping不起作用。
答案 1 :(得分:1)
事实证明, ios_user
模块与Cisco IOS版本 12.2(55)SE 不兼容,因为它正在使用输出过滤器(& #34; section
")不适用于此设备的版本。要解决这个问题,我只需要用" section
" 替换" include
" 这个词在ansible/modules/network/ios/ios_user.py
文件中的strong>(完整的文件路径取决于您的安装程序,因为您可能正在使用虚拟环境)。
Here is the module code。所以代码的那部分看起来像这样:
def map_config_to_obj(module): data = get_config(module, flags=['| include username']) match = re.findall(r'^username (\S+)', data, re.M) if not match: return list()
该模块现在有意义。对于 ios_ping
,我一直试图对其代码进行逆向工程,在我看来,还有一个以上的错误。我认为只有在成功率高于0%
时才有效。