Ansible(2.5.0)模块失败 - ios_user,ios_ping

时间:2018-05-18 08:23:18

标签: python networking ansible cisco cisco-ios

我正在编写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”模块。你们有什么想法吗?

2 个答案:

答案 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%时才有效。

相关问题