|
|
@@ -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
|
|
|
|