From 95c8b02096b0f3a6ac1cb5cece2e573c8361ad40 Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Mon, 7 Jun 2021 13:17:40 -0400 Subject: [PATCH] Add explicit capability for online volume expansion --- test/e2e/storage/drivers/csi.go | 2 ++ test/e2e/storage/drivers/in_tree.go | 2 ++ test/e2e/storage/external/external.go | 8 ++++++++ test/e2e/storage/framework/testdriver.go | 6 ++++-- test/e2e/storage/testsuites/volume_expand.go | 4 ++++ 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/test/e2e/storage/drivers/csi.go b/test/e2e/storage/drivers/csi.go index 223be2edcca..bc7f055c573 100644 --- a/test/e2e/storage/drivers/csi.go +++ b/test/e2e/storage/drivers/csi.go @@ -143,6 +143,7 @@ func InitHostPathCSIDriver() storageframework.TestDriver { storageframework.CapBlock: true, storageframework.CapPVCDataSource: true, storageframework.CapControllerExpansion: true, + storageframework.CapOnlineExpansion: true, storageframework.CapSingleNodeVolume: true, // This is needed for the @@ -788,6 +789,7 @@ func InitGcePDCSIDriver() storageframework.TestDriver { storageframework.CapVolumeLimits: false, storageframework.CapTopology: true, storageframework.CapControllerExpansion: true, + storageframework.CapOnlineExpansion: true, storageframework.CapNodeExpansion: true, storageframework.CapSnapshotDataSource: true, }, diff --git a/test/e2e/storage/drivers/in_tree.go b/test/e2e/storage/drivers/in_tree.go index 787f2a39614..c2fc7d22f61 100644 --- a/test/e2e/storage/drivers/in_tree.go +++ b/test/e2e/storage/drivers/in_tree.go @@ -1251,6 +1251,7 @@ func InitGcePdDriver() storageframework.TestDriver { storageframework.CapExec: true, storageframework.CapMultiPODs: true, storageframework.CapControllerExpansion: true, + storageframework.CapOnlineExpansion: true, storageframework.CapNodeExpansion: true, // GCE supports volume limits, but the test creates large // number of volumes and times out test suites. @@ -1692,6 +1693,7 @@ func InitAwsDriver() storageframework.TestDriver { storageframework.CapMultiPODs: true, storageframework.CapControllerExpansion: true, storageframework.CapNodeExpansion: true, + storageframework.CapOnlineExpansion: true, // AWS supports volume limits, but the test creates large // number of volumes and times out test suites. storageframework.CapVolumeLimits: false, diff --git a/test/e2e/storage/external/external.go b/test/e2e/storage/external/external.go index 0d20d1e792f..8e90260b09e 100644 --- a/test/e2e/storage/external/external.go +++ b/test/e2e/storage/external/external.go @@ -203,6 +203,14 @@ func loadDriverDefinition(filename string) (*driverDefinition, error) { if err := runtime.DecodeInto(scheme.Codecs.UniversalDecoder(), data, driver); err != nil { return nil, errors.Wrap(err, filename) } + + // to ensure backward compatibility if controller expansion is enabled then set online expansion to true + if _, ok := driver.GetDriverInfo().Capabilities[storageframework.CapOnlineExpansion]; !ok && + driver.GetDriverInfo().Capabilities[storageframework.CapControllerExpansion] { + caps := driver.DriverInfo.Capabilities + caps[storageframework.CapOnlineExpansion] = true + driver.DriverInfo.Capabilities = caps + } return driver, nil } diff --git a/test/e2e/storage/framework/testdriver.go b/test/e2e/storage/framework/testdriver.go index 0ce0fd5456d..1b198a45bb2 100644 --- a/test/e2e/storage/framework/testdriver.go +++ b/test/e2e/storage/framework/testdriver.go @@ -17,13 +17,14 @@ limitations under the License. package framework import ( - "k8s.io/api/core/v1" + "time" + + v1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/test/e2e/framework" e2evolume "k8s.io/kubernetes/test/e2e/framework/volume" - "time" ) // TestDriver represents an interface for a driver to be tested in TestSuite. @@ -164,6 +165,7 @@ const ( CapRWX Capability = "RWX" // support ReadWriteMany access modes CapControllerExpansion Capability = "controllerExpansion" // support volume expansion for controller CapNodeExpansion Capability = "nodeExpansion" // support volume expansion for node + CapOnlineExpansion Capability = "onlineExpansion" // supports online volume expansion CapVolumeLimits Capability = "volumeLimits" // support volume limits (can be *very* slow) CapSingleNodeVolume Capability = "singleNodeVolume" // support volume that can run on single node (like hostpath) CapTopology Capability = "topology" // support topology diff --git a/test/e2e/storage/testsuites/volume_expand.go b/test/e2e/storage/testsuites/volume_expand.go index 472982c7e13..6172c305f3a 100644 --- a/test/e2e/storage/testsuites/volume_expand.go +++ b/test/e2e/storage/testsuites/volume_expand.go @@ -247,6 +247,10 @@ func (v *volumeExpandTestSuite) DefineTests(driver storageframework.TestDriver, init() defer cleanup() + if !driver.GetDriverInfo().Capabilities[storageframework.CapOnlineExpansion] { + e2eskipper.Skipf("Driver %q does not support online volume expansion - skipping", driver.GetDriverInfo().Name) + } + var err error ginkgo.By("Creating a pod with dynamically provisioned volume") podConfig := e2epod.Config{