From f369b1234a5bd0fdf87e8697342890a8a6d22a30 Mon Sep 17 00:00:00 2001 From: Jonathan Dobson Date: Wed, 20 Apr 2022 18:08:02 -0600 Subject: [PATCH] e2e: add storage capability for offline volume expansion --- test/e2e/storage/drivers/csi.go | 2 ++ test/e2e/storage/drivers/in_tree.go | 2 ++ test/e2e/storage/external/external.go | 9 ++++++++- test/e2e/storage/framework/testdriver.go | 16 ++++++++++++---- test/e2e/storage/testsuites/volume_expand.go | 4 ++++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/test/e2e/storage/drivers/csi.go b/test/e2e/storage/drivers/csi.go index 10af124fc4c..99c126e5d03 100644 --- a/test/e2e/storage/drivers/csi.go +++ b/test/e2e/storage/drivers/csi.go @@ -147,6 +147,7 @@ func InitHostPathCSIDriver() storageframework.TestDriver { storageframework.CapBlock: true, storageframework.CapPVCDataSource: true, storageframework.CapControllerExpansion: true, + storageframework.CapOfflineExpansion: true, storageframework.CapOnlineExpansion: true, storageframework.CapSingleNodeVolume: true, @@ -810,6 +811,7 @@ func InitGcePDCSIDriver() storageframework.TestDriver { storageframework.CapVolumeLimits: false, storageframework.CapTopology: true, storageframework.CapControllerExpansion: true, + storageframework.CapOfflineExpansion: 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 9856806bc32..425697cfd22 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.CapOfflineExpansion: true, storageframework.CapOnlineExpansion: true, storageframework.CapNodeExpansion: true, // GCE supports volume limits, but the test creates large @@ -1702,6 +1703,7 @@ func InitAwsDriver() storageframework.TestDriver { storageframework.CapMultiPODs: true, storageframework.CapControllerExpansion: true, storageframework.CapNodeExpansion: true, + storageframework.CapOfflineExpansion: true, storageframework.CapOnlineExpansion: true, // AWS supports volume limits, but the test creates large // number of volumes and times out test suites. diff --git a/test/e2e/storage/external/external.go b/test/e2e/storage/external/external.go index 96fa864bafc..375bdfde58e 100644 --- a/test/e2e/storage/external/external.go +++ b/test/e2e/storage/external/external.go @@ -203,13 +203,20 @@ func loadDriverDefinition(filename string) (*driverDefinition, error) { return nil, fmt.Errorf("%s: %w", filename, err) } - // to ensure backward compatibility if controller expansion is enabled then set online expansion to true + // To ensure backward compatibility: if controller expansion is enabled, + // then set both online and offline 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 } + if _, ok := driver.GetDriverInfo().Capabilities[storageframework.CapOfflineExpansion]; !ok && + driver.GetDriverInfo().Capabilities[storageframework.CapControllerExpansion] { + caps := driver.DriverInfo.Capabilities + caps[storageframework.CapOfflineExpansion] = 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 4d090ef7153..7882346613e 100644 --- a/test/e2e/storage/framework/testdriver.go +++ b/test/e2e/storage/framework/testdriver.go @@ -166,10 +166,18 @@ 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 + + // offlineExpansion and onlineExpansion both default to true when + // controllerExpansion is true. The only reason to set offlineExpansion + // to false is when a CSI driver can only expand a volume while it's + // attached to a pod. Conversely, onlineExpansion can be set to false + // if the driver can only expand a volume while it is detached. + CapOfflineExpansion Capability = "offlineExpansion" // supports offline volume expansion (default: true) + CapOnlineExpansion Capability = "onlineExpansion" // supports online volume expansion (default: true) + + 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 // The driver publishes storage capacity information: when the storage class // for dynamic provisioning exists, the driver is expected to provide diff --git a/test/e2e/storage/testsuites/volume_expand.go b/test/e2e/storage/testsuites/volume_expand.go index 6a562550191..95014c84d54 100644 --- a/test/e2e/storage/testsuites/volume_expand.go +++ b/test/e2e/storage/testsuites/volume_expand.go @@ -177,6 +177,10 @@ func (v *volumeExpandTestSuite) DefineTests(driver storageframework.TestDriver, init() defer cleanup() + if !driver.GetDriverInfo().Capabilities[storageframework.CapOfflineExpansion] { + e2eskipper.Skipf("Driver %q does not support offline volume expansion - skipping", driver.GetDriverInfo().Name) + } + var err error ginkgo.By("Creating a pod with dynamically provisioned volume") podConfig := e2epod.Config{