You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:10:33