Ansible通过vmware_tools连接时出现HTTPSConnection错误求助
解决Ansible使用vmware_tools时间歇性HTTPSConnection错误的方案
我在Ansible中使用vmware_tools连接类型,近期频繁遇到HTTPSConnection错误,具体报错信息如下:
TASK [Gathering Facts] ************************ Friday 28 October 2022 20:11:54 -0400 (0:00:00.011) 0:00:00.011 ok: [linux1] ok: [linux2] An exception occurred during task execution. To see the full traceback, use -vvv. The error was: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='akr-r730-05.stec.local', port=443): Max retries exceeded with url: /guestFile?id=696&token=523abf8b-8bc0-d71b-b844-2fc62de4af59696 (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fbb51d0e460>: Failed to establish a new connection: [Errno -2] Name or service not known')) fatal: [windows1]: FAILED! => {"msg": "Unexpected failure during module execution.", "stdout": ""}
必须使用vmware_tools的原因:
- 需要连接Windows 2016系统完成OpenSSH的初始安装
- 要在未联网的克隆虚拟机上测试,当前网络配置不能改动
问题为间歇性出现,有时会固定发生在剧本的同一环节,并非仅在收集事实阶段出现,以下是针对性的解决方法:
1. 修复ESXi主机名解析问题
报错核心提示Name or service not known,说明Ansible控制节点无法稳定解析ESXi主机akr-r730-05.stec.local:
- 手动在控制节点多次执行
ping akr-r730-05.stec.local,验证解析是否稳定 - 若DNS服务不稳定,直接将ESXi主机的IP和主机名写入控制节点的hosts文件:
- Linux控制节点:编辑
/etc/hosts,添加[ESXi_IP] akr-r730-05.stec.local - Windows控制节点:编辑
C:\Windows\System32\drivers\etc\hosts,添加同样内容
- Linux控制节点:编辑
2. 调整vmware_tools连接参数
通过调整超时、关闭证书验证来提升连接稳定性:
- 在
ansible.cfg中添加配置:[defaults] timeout = 30 [vmware] vmware_validate_certs = False - 或者在剧本的变量中设置:
vars: ansible_vmware_tools_timeout: 30 ansible_vmware_validate_certs: no
3. 同步VMware Tools与ESXi版本
老旧或不兼容的Tools版本可能引发通信异常:
- 将Windows虚拟机内的VMware Tools升级至与ESXi主机匹配的最新兼容版本
- 检查ESXi主机是否安装了最新补丁,修复已知的Tools通信bug
4. 降低剧本并发执行数
并发过高可能耗尽ESXi主机的API连接池,导致间歇性失败:
- 在剧本中设置
serial: 1(单台串行执行),或根据实际情况调整为serial: 2 - 修改
ansible.cfg中的forks参数,降低默认并发数:[defaults] forks = 5
5. 给易失败任务添加重试逻辑
针对间歇性问题,给任务增加重试机制,例如收集事实任务:
- name: Gathering Facts setup: register: result until: result is success retries: 3 delay: 5
内容的提问来源于stack exchange,提问作者IncredibleStorm
相关产品推荐
相关产品推荐

