From 383a42a4b4f3f3a74fd3664707693ac806790ead Mon Sep 17 00:00:00 2001 From: Ritesh H Shukla Date: Thu, 2 Mar 2017 07:55:10 +0000 Subject: [PATCH] Support adding disks to more than one scsi adapter Fixes #42399 --- .../providers/vsphere/vsphere.go | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/pkg/cloudprovider/providers/vsphere/vsphere.go b/pkg/cloudprovider/providers/vsphere/vsphere.go index 16a8134b63..bc0129ea32 100644 --- a/pkg/cloudprovider/providers/vsphere/vsphere.go +++ b/pkg/cloudprovider/providers/vsphere/vsphere.go @@ -761,7 +761,15 @@ func (vs *VSphere) AttachDisk(vmDiskPath string, nodeName k8stypes.NodeName) (di return "", "", err } - scsiController = getSCSIController(vmDevices, vs.cfg.Disk.SCSIControllerType) + // Get VM device list + _, vmDevices, _, err := getVirtualMachineDevices(ctx, vs.cfg, vs.client, vSphereInstance) + if err != nil { + glog.Errorf("cannot get vmDevices for VM err=%s", err) + return "", "", fmt.Errorf("cannot get vmDevices for VM err=%s", err) + } + + scsiControllersOfRequiredType := getSCSIControllersOfType(vmDevices, diskControllerType) + scsiController := getAvailableSCSIController(scsiControllersOfRequiredType) if scsiController == nil { glog.Errorf("cannot find SCSI controller in VM") // attempt clean up of scsi controller @@ -1021,7 +1029,7 @@ func (vs *VSphere) DisksAreAttached(volPaths []string, nodeName k8stypes.NodeNam } func checkDiskAttached(volPath string, vmdevices object.VirtualDeviceList, dc *object.Datacenter, client *govmomi.Client) (bool, error) { - virtualDiskControllerKey, err := getVirtualDiskControllerKey(volPath, vmdevices, dc, client) + _, err := getVirtualDiskControllerKey(volPath, vmdevices, dc, client) if err != nil { if err == ErrNoDevicesFound { return false, nil @@ -1029,14 +1037,7 @@ func checkDiskAttached(volPath string, vmdevices object.VirtualDeviceList, dc *o glog.Errorf("Failed to check whether disk is attached. err: %s", err) return false, err } - for _, controllerType := range supportedSCSIControllerType { - controllerkey, _ := getControllerKey(controllerType, vmdevices) - if controllerkey == virtualDiskControllerKey { - return true, nil - } - } - return false, ErrNonSupportedControllerType - + return true, nil } // Returns the object key that denotes the controller object to which vmdk is attached.