问题描述
我对ansible有疑问: 我写了一些剧本,做一些基本的事情,例如从mikrotik获得routeros版本,而剧本本身似乎运行良好。 我的意思是,大约有一半的mikrotiks(全部在一个网络中,全部通过ssh到达,所有都具有相同的防火墙设置等)发送我要求的信息。但是另一半我得到了这个奇怪的错误(见下文)。
我用两个mikrotiks(RB2011UiAS)进行了严格的测试。其中一个工作,另一个导致下面的例外。我并排比较了配置,然后其他IP(在同一网络中)的一切都是100%相同的。甚至是软件版本。两者都可以通过ssh到达。
An exception occurred during task execution. To see the full traceback,use -vvv. The error was: ansible.module_utils.connection.ConnectionError: timeout value 10 seconds reached while trying to send command: /system resource print
fatal: [XXX:XXX:XXX:X::XX]: Failed! => {"changed": false,"module_stderr": "Traceback (most recent call last):\n File \"/root/.ansible/tmp/ansible-local-22921xL1Zh9/ansible-tmp-1598512873.3-22929-127716503250274/AnsiballZ_routeros_command.py\",line 102,in <module>\n _ansiballz_main()\n File \"/root/.ansible/tmp/ansible-local-22921xL1Zh9/ansible-tmp-1598512873.3-22929-127716503250274/AnsiballZ_routeros_command.py\",line 94,in _ansiballz_main\n invoke_module(zipped_mod,temp_path,ANSIBALLZ_ParaMS)\n File \"/root/.ansible/tmp/ansible-local-22921xL1Zh9/ansible-tmp-1598512873.3-22929-127716503250274/AnsiballZ_routeros_command.py\",line 40,in invoke_module\n runpy.run_module(mod_name='ansible.modules.network.routeros.routeros_command',init_globals=None,run_name='__main__',alter_sys=True)\n File \"/usr/lib/python2.7/runpy.py\",line 188,in run_module\n fname,loader,pkg_name)\n File \"/usr/lib/python2.7/runpy.py\",line 82,in _run_module_code\n mod_name,mod_fname,mod_loader,line 72,in _run_code\n exec code in run_globals\n File \"/tmp/ansible_routeros_command_payload_VN97ME/ansible_routeros_command_payload.zip/ansible/modules/network/routeros/routeros_command.py\",line 187,in <module>\n File \"/tmp/ansible_routeros_command_payload_VN97ME/ansible_routeros_command_payload.zip/ansible/modules/network/routeros/routeros_command.py\",line 157,in main\n File \"/tmp/ansible_routeros_command_payload_VN97ME/ansible_routeros_command_payload.zip/ansible/module_utils/network/routeros/routeros.py\",line 125,in run_commands\n File \"/tmp/ansible_routeros_command_payload_VN97ME/ansible_routeros_command_payload.zip/ansible/module_utils/network/routeros/routeros.py\",line 55,in get_connection\n File \"/tmp/ansible_routeros_command_payload_VN97ME/ansible_routeros_command_payload.zip/ansible/module_utils/network/routeros/routeros.py\",line 69,in get_capabilities\n File \"/tmp/ansible_routeros_command_payload_VN97ME/ansible_routeros_command_payload.zip/ansible/module_utils/connection.py\",line 185,in __rpc__\nansible.module_utils.connection.ConnectionError: timeout value 10 seconds reached while trying to send command: /system resource print\n","module_stdout": "","msg": "MODULE FAILURE\nSee stdout/stderr for the exact error","rc": 1}
(排除了ipv6)
这是剧本:
---
- name: Check mikrotik os version
hosts: mikrotik
gather_facts: no
tasks:
- name: CHeck OS
routeros_command:
commands: /system package print
register: version_output
- name: disply version
debug:
var: version_output
在设备上手动执行命令即可。
我在另一本剧本上进行了尝试,将mikrotiks与旧的和全新的固件一起使用,将超时设置为120秒,到目前为止没有任何效果。 我也知道用户名中某些符号引起的问题,而在这里不是这种情况。
如果您需要更多信息,我将很乐意提供这些信息。 如果有人知道什么可能导致此问题,我会很高兴。
解决方法
我修复了它。导致我的问题的原因是mikrotik cpes的主机名有时长于31个字符,由于控制路径长度限制为ansible,将导致此错误。重命名它们即可正常工作。
,检查路由器中的身份是否具有特殊的字符,例如/,routeros_command调用资源print并弄乱该身份。至少对我有用...