使用Ansible部署vCenter Server Appliance OVF失败求助
问题描述
我尝试编写Ansible Playbook从OVF文件部署vCenter,但遇到错误且排查无果。以下是我的Playbook:
- hosts: localhost connection: local become: yes gather_facts: false ignore_errors: true collections: - community.vmware pre_tasks: - include_vars: vars.yml tasks: - name: deploy ovf vmware_deploy_ovf: hostname: "{{ hostname }}" username: "{{ username }}" password: "{{ password }}" validate_certs: "{{ validate_certs }}" datacenter: "{{ datacenter }}" name: "{{ vm_name }}" ovf: "{{ ovf_path }}" cluster: "{{ cluster }}" wait_for_ip_address: true inject_ovf_env: false power_on: no datastore: "{{ datastore }}" networks: "{u'Management Network':u'Management Network'}" disk_provisioning: thin delegate_to: localhost
收到的错误信息:
The full traceback is: File "/tmp/ansible_vmware_deploy_ovf_payload_l85kfuc6/ansible_vmware_deploy_ovf_payload.zip/ansible_collections/community/vmware/plugins/modules/vmware_deploy_ovf.py", line 319, in run File "/tmp/ansible_vmware_deploy_ovf_payload_l85kfuc6/ansible_vmware_deploy_ovf_payload.zip/ansible_collections/community/vmware/plugins/modules/vmware_deploy_ovf.py", line 307, in _open_url File "/tmp/ansible_vmware_deploy_ovf_payload_l85kfuc6/ansible_vmware_deploy_ovf_payload.zip/ansible/module_utils/urls.py", line 1575, in open_url return Request().open(method, url, data=data, headers=headers, use_proxy=use_proxy, File "/tmp/ansible_vmware_deploy_ovf_payload_l85kfuc6/ansible_vmware_deploy_ovf_payload.zip/ansible/module_utils/urls.py", line 1486, in open return urllib_request.urlopen(request, None, timeout) File "/usr/local/lib/python3.10/urllib/request.py", line 216, in urlopen return opener.open(url, data, timeout) File "/usr/local/lib/python3.10/urllib/request.py", line 519, in open response = self._open(req, data) File "/usr/local/lib/python3.10/urllib/request.py", line 536, in _open result = self._call_chain(self.handle_open, protocol, protocol + File "/usr/local/lib/python3.10/urllib/request.py", line 496, in _call_chain result = func(*args) File "/tmp/ansible_vmware_deploy_ovf_payload_l85kfuc6/ansible_vmware_deploy_ovf_payload.zip/ansible/module_utils/urls.py", line 588, in https_open return self.do_open(self._build_https_connection, req) File "/usr/local/lib/python3.10/urllib/request.py", line 1351, in do_open raise URLError(err) fatal: [localhost]: FAILED! => { "changed": false, "invocation": { "module_args": { "allow_duplicates": true, "cluster": "****", "datacenter": "*****", "datastore": "*****", "deployment_option": null, "disk_provisioning": "thin", "esxi_hostname": null, "fail_on_spec_warnings": false, "folder": null, "hostname": "********", "inject_ovf_env": false, "name": "vm-test", "networks": { "Management Network": "Management Network" }, "ovf": "/path/CentOS7.ovf", "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "port": 443, "power_on": false, "properties": null, "proxy_host": null, "proxy_port": null, "resource_pool": "*******", "username": "*******", "validate_certs": false, "wait": true, "wait_for_ip_address": true } }, "msg": "<urlopen error [Errno -2] Name or service not known>" }
请问该错误的根源是什么?
错误根源及解决方法
这个错误的核心是无法解析vCenter服务器的主机名,即hostname变量指定的地址在执行Playbook的机器上无法通过DNS解析,或主机名本身填写错误。
具体排查与修复步骤:
- 验证主机名解析:在执行Playbook的机器上,用
ping <vcenter-hostname>、nslookup <vcenter-hostname>或dig <vcenter-hostname>检查DNS解析是否正常。若解析失败,说明主机名填写错误、DNS配置异常,或vCenter服务器网络不可达。 - 检查
vars.yml中的hostname值:确认该变量是vCenter的正确FQDN或IP地址。如果用FQDN,确保执行机器能解析该域名;如果用IP,直接测试网络连通性。 - 排查网络连通性:若解析正常仍报错,用
telnet <vcenter-hostname> 443或nc -zv <vcenter-hostname> 443测试vCenter的443端口是否可访问,确认无防火墙或路由阻挡连接。 - 修正
networks参数格式:Playbook中networks使用了Python字典字符串格式"{u'Management Network':u'Management Network'}",不符合Ansible规范,应改为YAML字典格式:
这虽不是当前错误的直接原因,但可能引发后续部署问题,建议一并修正。networks: "Management Network": "Management Network"
内容的提问来源于stack exchange,提问作者user18890347
相关产品推荐
相关产品推荐

