Add constants and documentation aroung AWS magic numbers

Also, remove check for IOPS per GB, AWS checks it on its own.
This commit is contained in:
Jan Safranek
2016-08-22 15:30:47 +02:00
parent e30c0b8dcd
commit a596668de7

View File

@@ -221,6 +221,13 @@ const (
VolumeTypeST1 = "st1" VolumeTypeST1 = "st1"
) )
// AWS provisioning limits.
// Source: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html
const (
MinTotalIOPS = 100
MaxTotalIOPS = 20000
)
// VolumeOptions specifies capacity and tags for a volume. // VolumeOptions specifies capacity and tags for a volume.
type VolumeOptions struct { type VolumeOptions struct {
CapacityGB int CapacityGB int
@@ -229,8 +236,7 @@ type VolumeOptions struct {
VolumeType string VolumeType string
AvailabilityZone string AvailabilityZone string
// IOPSPerGB x CapacityGB will give total IOPS of the volume to create. // IOPSPerGB x CapacityGB will give total IOPS of the volume to create.
// IOPSPerGB must be bigger than zero and smaller or equal to 30. // Calculated total IOPS will be capped at MaxTotalIOPS.
// Calculated total IOPS will be capped at 20000 IOPS.
IOPSPerGB int IOPSPerGB int
Encrypted bool Encrypted bool
// fully qualified resource name to the key to use for encryption. // fully qualified resource name to the key to use for encryption.
@@ -1509,17 +1515,19 @@ func (c *Cloud) CreateDisk(volumeOptions *VolumeOptions) (string, error) {
createType = volumeOptions.VolumeType createType = volumeOptions.VolumeType
case VolumeTypeIO1: case VolumeTypeIO1:
// See http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html for IOPS constraints // See http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html
if volumeOptions.IOPSPerGB <= 0 || volumeOptions.IOPSPerGB > 30 { // for IOPS constraints. AWS will throw an error if IOPS per GB gets out
return "", fmt.Errorf("invalid iopsPerGB value %d, must be 0 < IOPSPerGB <= 30", volumeOptions.IOPSPerGB) // of supported bounds, no need to check it here.
}
createType = volumeOptions.VolumeType createType = volumeOptions.VolumeType
iops = int64(volumeOptions.CapacityGB * volumeOptions.IOPSPerGB) iops = int64(volumeOptions.CapacityGB * volumeOptions.IOPSPerGB)
if iops < 100 {
iops = 100 // Cap at min/max total IOPS, AWS would throw an error if it gets too
// low/high.
if iops < MinTotalIOPS {
iops = MinTotalIOPS
} }
if iops > 20000 { if iops > MaxTotalIOPS {
iops = 20000 iops = MaxTotalIOPS
} }
case "": case "":