Ansible playbook 导致任务执行一半时间发生异常

Ansible playbook causes exception occurred during task execution half of the time

我对 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, pkg_name)\n File \"/usr/lib/python2.7/runpy.py\", 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

在设备上手动执行命令有效。

我用另一个 playbook 尝试过,mikrotiks 有旧的和全新的固件,将超时设置为 120 秒,到目前为止没有任何效果。 我也知道用户名中的某些符号导致的问题,但这里不是这种情况。

如果您需要更多信息,我很乐意提供。 如果有人知道是什么导致了这个问题,我会很高兴。

检查你在路由器中的身份是否有像/这样的特殊字符,routeros_command调用资源打印并被身份弄乱。好吧至少它对我有用...

我修好了。导致我出现问题的原因是 mikrotik cpes 的主机名有时超过 31 个字符,由于 ansible 的控制路径长度限制,这将导致此错误。重命名它们使其工作。