Ansible (2.5.0) 模块故障 - ios_user、ios_ping

Ansible (2.5.0) Module Failure - ios_user, ios_ping

我正在编写 Ansible 剧本,突然我开始收到 "Module Error",我不知道为什么。我在 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" returns 这个错误:

$ 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}

"ios_user" returns 这个错误:

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 }

IOS 配置: config.text

Ansible 库存: Resources/Inventory/hosts

Ansible 版本: 2.5.0

思科IOS版本:12.2(55)SE

连接工作正常,我也能够执行 "ios_system" 模块。你们知道这可能是什么吗?

第二个错误表明

show running-config | section username

在您的设备上不是有效命令。您可以手动尝试 运行 吗,很可能它也会失败。我猜你的 IOS 对于大多数 ios_ 模块来说太旧或太新(12.2-你到底是什么 运行?)。这也可以解释由于命令输出不同导致 ping 不工作。

事实证明,ios_user 模块与 Cisco IOS 版本 12.2(55)SE 因为它使用的输出过滤器 ("section") 不适用于此设备的版本。为了解决这个问题,我只需要在 ansible/modules/network/ios/ios_user.py 文件(完整的文件路径取决于你的ansible安装,因为你可能正在使用虚拟环境)。 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%.

时才有效