Terraform部署vSphere7.0虚拟机PCI直通设备挂载报错如何解决
问题排查与解决步骤
你遇到的Error: A specified parameter was not correct: deviceChange[1].device.key报错本质是vSphere API处理第二个PCI设备挂载请求时无法识别设备唯一标识,通常由配置错误、Provider版本缺陷导致,可按照以下步骤排查:
- 升级Terraform vSphere Provider版本
低于2.2.0的vSphere Provider存在多PCI直通挂载的已知bug,请先升级到最新稳定版,版本约束配置如下:
terraform { required_providers { vsphere = { source = "hashicorp/vsphere" version = ">= 2.2.0" } } }
修改后执行terraform init -upgrade完成Provider版本更新。
- 验证ESXi主机PCI设备状态
- 登录对应ESXi主机的vCenter管理界面,确认你填写的3个PCI地址
0000:5e:0e.0、0000:5e:0e.1、0000:5e:0a.0均已启用直通,状态为可用,且没有被其他虚拟机占用 - 确认所有要挂载的PCI设备如果属于同一个IOMMU组,必须全部挂载给同一台虚拟机,不允许拆分分配
- 确认你指定的
host_system_id对应的ESXi主机确实存在上述PCI地址,避免跨主机指定不存在的设备 - 确认克隆所用的模板未绑定任何PCI直通设备,模板本身的设备残留会导致新虚拟机挂载PCI设备时出现键冲突
- 登录对应ESXi主机的vCenter管理界面,确认你填写的3个PCI地址
- 补全虚拟机必填配置
PCI直通设备要求虚拟机开启嵌套硬件虚拟化,请在vsphere_virtual_machine资源中添加参数:
nested_hv_enabled = true
你当前的内存预留配置(内存预留等于虚拟机总内存)已经符合直通要求,无需调整。
- 缩小范围排查问题
先将pci_device_id参数修改为仅填入单个PCI地址,执行terraform apply验证单个设备能否挂载成功:
pci_device_id = ["0000:5e:0e.0"]
单个挂载成功后再逐个添加剩余设备,确认是否是某一个特定设备的配置问题导致的报错。
- 临时规避方案
如果确认是Provider版本兼容问题无法快速修复,可以在资源中添加local-exec provisioner,调用govc工具在虚拟机创建完成后挂载PCI设备:
provisioner "local-exec" { command = <<EOT govc device.pci.add -vm ${self.name} 0000:5e:0e.0 govc device.pci.add -vm ${self.name} 0000:5e:0e.1 govc device.pci.add -vm ${self.name} 0000:5e:0a.0 EOT }
使用前需要提前在执行Terraform的节点上安装配置好govc,完成vCenter的身份认证。
内容的提问来源于stack exchange,提问作者noyro
相关产品推荐
相关产品推荐

