ansible playbook计时器仅在某些节点上10秒后过期,但在其他节点上工作正常

ansible playbook计时器仅在某些节点上10秒后过期,但在其他节点上工作正常,ansible,ansible-2.x,Ansible,Ansible 2.x,我可以ping所有服务器,但当我在所有节点上运行playbook时,它只在一些节点上工作,在其他节点上工作 计时器错误:计时器在10秒后过期 它工作得很好。这是从过去一周开始发生的 wrt playbook或ansible cfg文件未发生任何更改 The full traceback is: Traceback (most recent call last): File "/tmp/ansible_Kh_sLm/ansible_modlib.zip/ansible/module_u

我可以ping所有服务器,但当我在所有节点上运行playbook时,它只在一些节点上工作,在其他节点上工作

计时器错误:计时器在10秒后过期

它工作得很好。这是从过去一周开始发生的

wrt playbook或ansible cfg文件未发生任何更改

    The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_Kh_sLm/ansible_modlib.zip/ansible/module_utils/basic.py", line 2853, in run_command
    cmd = subprocess.Popen(args, **kwargs)
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1308, in _execute_child
    data = _eintr_retry_call(os.read, errpipe_read, 1048576)
  File "/usr/lib64/python2.7/subprocess.py", line 478, in _eintr_retry_call
    return func(*args)
  File "/tmp/ansible_Kh_sLm/ansible_modlib.zip/ansible/module_utils/facts/timeout.py", line 37, in _handle_timeout
    raise TimeoutError(msg)
TimeoutError: Timer expired after 10 seconds

fatal: [hostname]: FAILED! => {
    "changed": false, 
    "cmd": "/bin/findmnt --list --noheadings --notruncate", 
    "invocation": {
        "module_args": {
            "fact_path": "/etc/ansible/facts.d", 
            "filter": "*", 
            "gather_subset": [
                "all"
            ], 
            "gather_timeout": 10
        }
    }, 
    "msg": "Timer expired after 10 seconds", 
    "rc": 257
}

这似乎不是剧本的问题。正如@MatthewLDaniel所提到的,尝试通过ssh访问失败的节点。由于各种原因,这些节点/实例可能无法通过网络访问/没有响应。首先检查实例指标,即cpu、内存、磁盘和网络连接

PS:通过AWS/GCP控制台重新启动实例通常可以解决ssh超时问题(如果是系统级的)

另一方面,Ansible剧本的默认超时时间为10秒。您可以在运行playbook时通过传递timeout参数来覆盖此设置

ansible-playbook playbook.yml -T <TIMEOUT>


这似乎不是剧本的问题。正如@MatthewLDaniel所提到的,尝试通过ssh访问失败的节点。由于各种原因,这些节点/实例可能无法通过网络访问/没有响应。首先检查实例指标,即cpu、内存、磁盘和网络连接

PS:通过AWS/GCP控制台重新启动实例通常可以解决ssh超时问题(如果是系统级的)

另一方面,Ansible剧本的默认超时时间为10秒。您可以在运行playbook时通过传递timeout参数来覆盖此设置

ansible-playbook playbook.yml -T <TIMEOUT>


这项工作对我很有帮助。
在/etc/ansible/ansible.cfg中,我设置了gather\u subset=!所有这些基本上只收集了最少的事实。我认为在收集事实的过程中,有些事情搞砸了。因此,根据您的需求设置值,以便仅收集您所需的事实。

这项工作对我有所帮助。
在/etc/ansible/ansible.cfg中,我设置了gather\u subset=!所有这些基本上只收集了最少的事实。我认为在收集事实的过程中,有些事情搞砸了。因此,根据您的需求,设置该值以仅收集您所需的事实。

在ansible.cfg中设置gather\u timeout=20应该可以解决此问题。解决方案的来源:

在ansible.cfg中设置gather\u timeout=20应该可以修复。解决方案的来源:

如果您使用ssh连接到该机器并手动运行cmd/bin/findmnt等,会发生什么情况?事实上,我猜这台机器正处于繁重的I/O负载下,导致该命令在内核中阻塞。当我运行/bin/findmnt-list-noheaders-notruncate时,它执行得很好。这是一个新节点,该节点上还没有任何内容。ansible playbook应该部署应用程序。很明显,这是一个空节点。如果您ssh到该机器并手动运行cmd/bin/findmnt等,会发生什么?事实上,我猜这台机器正处于繁重的I/O负载下,导致该命令在内核中阻塞。当我运行/bin/findmnt-list-noheaders-notruncate时,它执行得很好。这是一个新节点,该节点上还没有任何内容。ansible playbook应该部署应用程序。很明显,这是一个空节点,我可以通过ssh连接到这些节点。我也能做安斯平。我尝试将-timeout增加到20、30甚至50,结果是一样的。我发现在过去的10-15天里,很多人都有同样的问题。ansible论坛上也有一个帖子,看起来这个问题还没有解决。我能够通过ssh连接到这些节点。我也能做安斯平。我尝试将-timeout增加到20、30甚至50,结果是一样的。我发现在过去的10-15天里,很多人都有同样的问题。ansible论坛上也有一个帖子,看起来这个问题还没有解决。