使用Terraform在vSphere创建VM遇自定义失败及网络未连接问题求助
排查Terraform创建vSphere VM时自定义失败+网卡未连接问题
我来帮你拆解下这个问题,卡了两天确实闹心,咱们一步步来排查:
核心关联问题分析
从你给出的错误信息和现象来看,两个问题是绑定在一起的:
- 虚拟机自定义失败:本质是vSphere没法通过VMware Tools给Guest OS传递配置,而这依赖网络连通性
- 克隆后的VM网卡未勾选「已连接」:直接导致网络不通,进而触发自定义超时失败
结合你的环境(vSphere 6.7、Terraform 0.12.28、vSphere Provider 1.21.0),大概率是配置漏了网卡连接状态的显式声明,或是模板没满足自定义的前置要求。
分步修复与排查
1. 给网卡加显式连接配置
虽然你的模板里网卡是勾选「已连接」的,但Terraform的vSphere Provider在克隆时,不会默认继承这个属性,必须在配置里明确写出来:
修改resource "vsphere_virtual_machine" "vm"里的网卡块:
network_interface { network_id = data.vsphere_network.network.id adapter_type = data.vsphere_virtual_machine.vm_template.network_interface_types[0] connected = true # 强制设置网卡为已连接状态 start_connected = true # 确保VM开机时自动连网卡 }
2. 检查模板的自定义前置条件
vSphere的自定义功能有硬性要求,模板没满足的话肯定会失败:
- 必须安装VMware Tools:这是vSphere给Guest OS传配置的唯一通道,模板里要是没装或者Tools没启动,自定义直接失败。你可以去vSphere里查看模板的VMware Tools状态,确保是「运行中」。
- 模板必须处于关机状态:vSphere不允许从开机的VM克隆模板,确认你的
first-terraform-vm模板是关机状态。 - 模板网卡和目标网络匹配:模板的网卡端口组要和你Terraform里指定的
u32c01p26-1514一致,避免克隆后网络不兼容。
3. 调大自定义超时时间(可选但有用)
你配置里wait_for_guest_ip_timeout = 2太苛刻了,2秒根本不够VM获取IP,改成30秒试试:
wait_for_guest_ip_timeout = 30 wait_for_guest_net_timeout = 10
4. 修复后重新执行
之前创建的VM已经处于失败状态,得先标记为「需要重新创建」:
terraform taint vsphere_virtual_machine.vm[0]
然后重新执行部署:
terraform apply
额外排查技巧
- 查看vSphere事件日志:找到那个失败的VM,查看「事件」标签,里面会有更详细的自定义失败原因(比如Tools未响应、IP冲突、网络不通等),比Terraform的错误提示更精准。
- 验证Provider兼容性:vSphere Provider 1.21.0和vSphere 6.7是兼容的,但如果上述方法都无效,可以尝试升级Provider到最新的兼容版本(注意Terraform 0.12.x最高支持到vSphere Provider v2.1.x左右,不要升级过新)。
内容的提问来源于stack exchange,提问作者Darshan
相关产品推荐
相关产品推荐

