From 31f623dd30bc68a1c786beb83a77faf73da9aa5c Mon Sep 17 00:00:00 2001 From: Rain Date: Wed, 11 Mar 2020 15:10:59 +0800 Subject: [PATCH] fix(esxi): UnitNumber 7 is unavailable for scsi controller By default, the virtual SCSI controller is assigned to virtual device node (z:7), so that device node is unavailable for hard disks or other devices. https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.vm_admin.doc/GUID-5872D173-A076-42FE-8D0B-9DB0EB0E7362.html --- pkg/multicloud/esxi/host.go | 6 ++++++ pkg/multicloud/esxi/virtualmachine.go | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/pkg/multicloud/esxi/host.go b/pkg/multicloud/esxi/host.go index e2635dece3..26f4e592d0 100644 --- a/pkg/multicloud/esxi/host.go +++ b/pkg/multicloud/esxi/host.go @@ -787,6 +787,9 @@ func (self *SHost) DoCreateVM(ctx context.Context, ds *SDatastore, params SCreat ctrlKey = 1000 index = scsiIdx scsiIdx += 1 + if scsiIdx == 7 { + scsiIdx++ + } } else { ctrlKey = 200 + ideIdx/2 index = ideIdx % 2 @@ -951,6 +954,9 @@ func (host *SHost) CloneVM(ctx context.Context, from *SVirtualMachine, ds *SData var key int32 = 2000 sameDisk := from.FindDiskByDriver("scsi", "pvscsi") index += int32(len(sameDisk)) + if index >= 7 { + index++ + } if len(sameDisk) > 0 { key = minDiskKey(sameDisk) } diff --git a/pkg/multicloud/esxi/virtualmachine.go b/pkg/multicloud/esxi/virtualmachine.go index 16d7f13ff0..86a51a7a42 100644 --- a/pkg/multicloud/esxi/virtualmachine.go +++ b/pkg/multicloud/esxi/virtualmachine.go @@ -876,6 +876,12 @@ func (self *SVirtualMachine) CreateDisk(ctx context.Context, sizeMb int, uuid st ctlKey += int32(index / 2) } + // By default, the virtual SCSI controller is assigned to virtual device node (z:7), + // so that device node is unavailable for hard disks or other devices. + if index >= 7 && driver == "scsi" { + index++ + } + return self.createDiskInternal(ctx, sizeMb, uuid, int32(index), diskKey, ctlKey, "", true) }