| 
						
					 | 
					 | 
					@@ -63,7 +63,7 @@ const (
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						IopsLimitCapabilityMin              = 0
 | 
					 | 
					 | 
					 | 
						IopsLimitCapabilityMin              = 0
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					)
 | 
					 | 
					 | 
					 | 
					)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					var ErrProbeVolume = errors.New("Error scanning attached volumes")
 | 
					 | 
					 | 
					 | 
					var ErrProbeVolume = errors.New("error scanning attached volumes")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					type VsphereDiskUtil struct{}
 | 
					 | 
					 | 
					 | 
					type VsphereDiskUtil struct{}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					@@ -129,7 +129,7 @@ func (util *VsphereDiskUtil) CreateVolume(v *vsphereVolumeProvisioner, selectedN
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if volumeOptions.VSANStorageProfileData != "" {
 | 
					 | 
					 | 
					 | 
						if volumeOptions.VSANStorageProfileData != "" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if volumeOptions.StoragePolicyName != "" {
 | 
					 | 
					 | 
					 | 
							if volumeOptions.StoragePolicyName != "" {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								return nil, fmt.Errorf("Cannot specify storage policy capabilities along with storage policy name. Please specify only one")
 | 
					 | 
					 | 
					 | 
								return nil, fmt.Errorf("cannot specify storage policy capabilities along with storage policy name. Please specify only one")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							volumeOptions.VSANStorageProfileData = "(" + volumeOptions.VSANStorageProfileData + ")"
 | 
					 | 
					 | 
					 | 
							volumeOptions.VSANStorageProfileData = "(" + volumeOptions.VSANStorageProfileData + ")"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					@@ -186,12 +186,12 @@ func getVolPathfromVolumeName(deviceMountPath string) string {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func getCloudProvider(cloud cloudprovider.Interface) (*vsphere.VSphere, error) {
 | 
					 | 
					 | 
					 | 
					func getCloudProvider(cloud cloudprovider.Interface) (*vsphere.VSphere, error) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if cloud == nil {
 | 
					 | 
					 | 
					 | 
						if cloud == nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							klog.Errorf("Cloud provider not initialized properly")
 | 
					 | 
					 | 
					 | 
							klog.Errorf("Cloud provider not initialized properly")
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return nil, errors.New("Cloud provider not initialized properly")
 | 
					 | 
					 | 
					 | 
							return nil, errors.New("cloud provider not initialized properly")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						vs, ok := cloud.(*vsphere.VSphere)
 | 
					 | 
					 | 
					 | 
						vs, ok := cloud.(*vsphere.VSphere)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if !ok || vs == nil {
 | 
					 | 
					 | 
					 | 
						if !ok || vs == nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return nil, errors.New("Invalid cloud provider: expected vSphere")
 | 
					 | 
					 | 
					 | 
							return nil, errors.New("invalid cloud provider: expected vSphere")
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return vs, nil
 | 
					 | 
					 | 
					 | 
						return vs, nil
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					@@ -201,55 +201,55 @@ func validateVSANCapability(capabilityName string, capabilityValue string) (stri
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						var capabilityData string
 | 
					 | 
					 | 
					 | 
						var capabilityData string
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						capabilityIntVal, ok := verifyCapabilityValueIsInteger(capabilityValue)
 | 
					 | 
					 | 
					 | 
						capabilityIntVal, ok := verifyCapabilityValueIsInteger(capabilityValue)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if !ok {
 | 
					 | 
					 | 
					 | 
						if !ok {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return "", fmt.Errorf("Invalid value for %s. The capabilityValue: %s must be a valid integer value", capabilityName, capabilityValue)
 | 
					 | 
					 | 
					 | 
							return "", fmt.Errorf("invalid value for %s. The capabilityValue: %s must be a valid integer value", capabilityName, capabilityValue)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						switch strings.ToLower(capabilityName) {
 | 
					 | 
					 | 
					 | 
						switch strings.ToLower(capabilityName) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						case HostFailuresToTolerateCapability:
 | 
					 | 
					 | 
					 | 
						case HostFailuresToTolerateCapability:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if capabilityIntVal >= HostFailuresToTolerateCapabilityMin && capabilityIntVal <= HostFailuresToTolerateCapabilityMax {
 | 
					 | 
					 | 
					 | 
							if capabilityIntVal >= HostFailuresToTolerateCapabilityMin && capabilityIntVal <= HostFailuresToTolerateCapabilityMax {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								capabilityData = " (\"hostFailuresToTolerate\" i" + capabilityValue + ")"
 | 
					 | 
					 | 
					 | 
								capabilityData = " (\"hostFailuresToTolerate\" i" + capabilityValue + ")"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							} else {
 | 
					 | 
					 | 
					 | 
							} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`Invalid value for hostFailuresToTolerate.
 | 
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`invalid value for hostFailuresToTolerate.
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									The default value is %d, minimum value is %d and maximum value is %d.`,
 | 
					 | 
					 | 
					 | 
									The default value is %d, minimum value is %d and maximum value is %d`,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									1, HostFailuresToTolerateCapabilityMin, HostFailuresToTolerateCapabilityMax)
 | 
					 | 
					 | 
					 | 
									1, HostFailuresToTolerateCapabilityMin, HostFailuresToTolerateCapabilityMax)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						case ForceProvisioningCapability:
 | 
					 | 
					 | 
					 | 
						case ForceProvisioningCapability:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if capabilityIntVal >= ForceProvisioningCapabilityMin && capabilityIntVal <= ForceProvisioningCapabilityMax {
 | 
					 | 
					 | 
					 | 
							if capabilityIntVal >= ForceProvisioningCapabilityMin && capabilityIntVal <= ForceProvisioningCapabilityMax {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								capabilityData = " (\"forceProvisioning\" i" + capabilityValue + ")"
 | 
					 | 
					 | 
					 | 
								capabilityData = " (\"forceProvisioning\" i" + capabilityValue + ")"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							} else {
 | 
					 | 
					 | 
					 | 
							} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`Invalid value for forceProvisioning.
 | 
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`invalid value for forceProvisioning.
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									The value can be either %d or %d.`,
 | 
					 | 
					 | 
					 | 
									The value can be either %d or %d`,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									ForceProvisioningCapabilityMin, ForceProvisioningCapabilityMax)
 | 
					 | 
					 | 
					 | 
									ForceProvisioningCapabilityMin, ForceProvisioningCapabilityMax)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						case CacheReservationCapability:
 | 
					 | 
					 | 
					 | 
						case CacheReservationCapability:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if capabilityIntVal >= CacheReservationCapabilityMin && capabilityIntVal <= CacheReservationCapabilityMax {
 | 
					 | 
					 | 
					 | 
							if capabilityIntVal >= CacheReservationCapabilityMin && capabilityIntVal <= CacheReservationCapabilityMax {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								capabilityData = " (\"cacheReservation\" i" + strconv.Itoa(capabilityIntVal*10000) + ")"
 | 
					 | 
					 | 
					 | 
								capabilityData = " (\"cacheReservation\" i" + strconv.Itoa(capabilityIntVal*10000) + ")"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							} else {
 | 
					 | 
					 | 
					 | 
							} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`Invalid value for cacheReservation.
 | 
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`invalid value for cacheReservation.
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									The minimum percentage is %d and maximum percentage is %d.`,
 | 
					 | 
					 | 
					 | 
									The minimum percentage is %d and maximum percentage is %d`,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									CacheReservationCapabilityMin, CacheReservationCapabilityMax)
 | 
					 | 
					 | 
					 | 
									CacheReservationCapabilityMin, CacheReservationCapabilityMax)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						case DiskStripesCapability:
 | 
					 | 
					 | 
					 | 
						case DiskStripesCapability:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if capabilityIntVal >= DiskStripesCapabilityMin && capabilityIntVal <= DiskStripesCapabilityMax {
 | 
					 | 
					 | 
					 | 
							if capabilityIntVal >= DiskStripesCapabilityMin && capabilityIntVal <= DiskStripesCapabilityMax {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								capabilityData = " (\"stripeWidth\" i" + capabilityValue + ")"
 | 
					 | 
					 | 
					 | 
								capabilityData = " (\"stripeWidth\" i" + capabilityValue + ")"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							} else {
 | 
					 | 
					 | 
					 | 
							} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`Invalid value for diskStripes.
 | 
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`invalid value for diskStripes.
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									The minimum value is %d and maximum value is %d.`,
 | 
					 | 
					 | 
					 | 
									The minimum value is %d and maximum value is %d`,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									DiskStripesCapabilityMin, DiskStripesCapabilityMax)
 | 
					 | 
					 | 
					 | 
									DiskStripesCapabilityMin, DiskStripesCapabilityMax)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						case ObjectSpaceReservationCapability:
 | 
					 | 
					 | 
					 | 
						case ObjectSpaceReservationCapability:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if capabilityIntVal >= ObjectSpaceReservationCapabilityMin && capabilityIntVal <= ObjectSpaceReservationCapabilityMax {
 | 
					 | 
					 | 
					 | 
							if capabilityIntVal >= ObjectSpaceReservationCapabilityMin && capabilityIntVal <= ObjectSpaceReservationCapabilityMax {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								capabilityData = " (\"proportionalCapacity\" i" + capabilityValue + ")"
 | 
					 | 
					 | 
					 | 
								capabilityData = " (\"proportionalCapacity\" i" + capabilityValue + ")"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							} else {
 | 
					 | 
					 | 
					 | 
							} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`Invalid value for ObjectSpaceReservation.
 | 
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`invalid value for ObjectSpaceReservation.
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									The minimum percentage is %d and maximum percentage is %d.`,
 | 
					 | 
					 | 
					 | 
									The minimum percentage is %d and maximum percentage is %d`,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									ObjectSpaceReservationCapabilityMin, ObjectSpaceReservationCapabilityMax)
 | 
					 | 
					 | 
					 | 
									ObjectSpaceReservationCapabilityMin, ObjectSpaceReservationCapabilityMax)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						case IopsLimitCapability:
 | 
					 | 
					 | 
					 | 
						case IopsLimitCapability:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if capabilityIntVal >= IopsLimitCapabilityMin {
 | 
					 | 
					 | 
					 | 
							if capabilityIntVal >= IopsLimitCapabilityMin {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								capabilityData = " (\"iopsLimit\" i" + capabilityValue + ")"
 | 
					 | 
					 | 
					 | 
								capabilityData = " (\"iopsLimit\" i" + capabilityValue + ")"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							} else {
 | 
					 | 
					 | 
					 | 
							} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`Invalid value for iopsLimit.
 | 
					 | 
					 | 
					 | 
								return "", fmt.Errorf(`invalid value for iopsLimit.
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									The value should be greater than %d.`, IopsLimitCapabilityMin)
 | 
					 | 
					 | 
					 | 
									The value should be greater than %d`, IopsLimitCapabilityMin)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
							}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return capabilityData, nil
 | 
					 | 
					 | 
					 | 
						return capabilityData, nil
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					 
 |