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%
.
时才有效
我正在编写 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%
.