Ansible剧本导致任务执行期间发生一半的异常

问题描述

我对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并弄乱该身份。至少对我有用...