0

我正在编写 Ansible 剧本,突然我开始收到“模块错误”,我不知道为什么。我在 CLI 中使用每个选项单独尝试了每个模块。我运行了语法检查 ( --syntax-check) 并且没有问题。我认为这可能是一个错误。

“ios_facts”模块的工作原理:

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

10.20.30.111 | 成功 => {

"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 | 失败的!=> { "changed": false, "module_stderr": "Traceback (last 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\",第 151 行,在 main\n 成功,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()\nAttributeError: 'NoneType'对象没有属性 'group'\n", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1}

“ios_user”返回此错误:

任务执行期间发生异常。要查看完整的回溯,请使用 -vvv。错误是:ASwitch#

10.20.30.111 | 失败的!=> { "changed": false, "module_stderr": "Traceback (last 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\",第 382 行,在 main\n 中有 = map_config_to_obj(module)\n 文件 \"/tmp/ansible_UX9ZWc/ansible_module_ios_user.py\",第 242 行,在 map_config_to_obj\n 数据中= get_config(module, flags=['| 部分用户名'])\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:显示运行配置| 部分用户名\r\n ^\r\n% 在 '^' 标记处检测到无效输入。\r\n\r\nASwitch#\n", "module_stdout": "", "msg": "MODULE FAILURE", “rc”:1}

IOS配置: config.text

Ansible 库存: 资源/库存/主机

Ansible 版本: 2.5.0

思科 IOS 版本: 12.2(55)SE

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

4

2 回答 2

1

第二个错误表明

show running-config | section username

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

于 2018-05-18T08:33:58.187 回答
1

事实证明,该ios_user模块与 Cisco IOS 版本12.2(55)SE不兼容,因为它使用的输出过滤器 (" section") 不适用于该设备的版本。为了解决这个问题,我只需要将文件中的section替换为include (完整的ansible/modules/network/ios/ios_user.py文件路径取决于您的 ansible 安装,因为您可能正在使用虚拟环境)。 这是模块代码。所以那部分代码看起来像这样:

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%.

于 2018-05-25T17:25:09.850 回答