From c41c958777549e2efe06e909ab7ba0e3f4a94ca3 Mon Sep 17 00:00:00 2001 From: Steve Kriss Date: Fri, 11 Aug 2017 12:10:47 -0700 Subject: [PATCH] only save/use iops for io1 volumes Signed-off-by: Steve Kriss --- pkg/apis/ark/v1/backup.go | 2 +- pkg/cloudprovider/aws/block_storage_adapter.go | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/pkg/apis/ark/v1/backup.go b/pkg/apis/ark/v1/backup.go index 5d9014994..0d954b6d2 100644 --- a/pkg/apis/ark/v1/backup.go +++ b/pkg/apis/ark/v1/backup.go @@ -111,7 +111,7 @@ type VolumeBackupInfo struct { // Iops is the optional value of provisioned IOPS for the // disk/volume in the cloud provider API. - Iops *int `json:"iops"` + Iops *int `json:"iops,omitempty"` } // +genclient=true diff --git a/pkg/cloudprovider/aws/block_storage_adapter.go b/pkg/cloudprovider/aws/block_storage_adapter.go index 133159d0f..8e3bd26e0 100644 --- a/pkg/cloudprovider/aws/block_storage_adapter.go +++ b/pkg/cloudprovider/aws/block_storage_adapter.go @@ -21,6 +21,8 @@ import ( "github.com/aws/aws-sdk-go/service/ec2" + "k8s.io/apimachinery/pkg/util/sets" + "github.com/heptio/ark/pkg/cloudprovider" ) @@ -31,6 +33,11 @@ type blockStorageAdapter struct { az string } +// iopsVolumeTypes is a set of AWS EBS volume types for which IOPS should +// be captured during snapshot and provided when creating a new volume +// from snapshot. +var iopsVolumeTypes = sets.NewString("io1") + func (op *blockStorageAdapter) CreateVolumeFromSnapshot(snapshotID, volumeType string, iops *int) (volumeID string, err error) { req := &ec2.CreateVolumeInput{ SnapshotId: &snapshotID, @@ -38,7 +45,7 @@ func (op *blockStorageAdapter) CreateVolumeFromSnapshot(snapshotID, volumeType s VolumeType: &volumeType, } - if iops != nil { + if iopsVolumeTypes.Has(volumeType) && iops != nil { req.SetIops(int64(*iops)) } @@ -68,18 +75,19 @@ func (op *blockStorageAdapter) GetVolumeInfo(volumeID string) (string, *int, err var ( volumeType string - iops int + iops *int ) if vol.VolumeType != nil { volumeType = *vol.VolumeType } - if vol.Iops != nil { - iops = int(*vol.Iops) + if iopsVolumeTypes.Has(volumeType) && vol.Iops != nil { + iopsVal := int(*vol.Iops) + iops = &iopsVal } - return volumeType, &iops, nil + return volumeType, iops, nil } func (op *blockStorageAdapter) IsVolumeReady(volumeID string) (ready bool, err error) {