@@ -23,11 +23,11 @@ import (
23
23
"github.com/pkg/errors"
24
24
25
25
storagev1 "k8s.io/api/storage/v1"
26
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26
27
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
27
28
"k8s.io/apimachinery/pkg/runtime"
28
29
"k8s.io/apimachinery/pkg/runtime/schema"
29
30
"k8s.io/apimachinery/pkg/util/sets"
30
- "k8s.io/apiserver/pkg/storage/names"
31
31
"k8s.io/client-go/kubernetes/scheme"
32
32
"k8s.io/kubernetes/test/e2e/framework"
33
33
"k8s.io/kubernetes/test/e2e/framework/config"
@@ -69,6 +69,10 @@ type driverDefinition struct {
69
69
// This can be used when the storage class is meant to have
70
70
// additional parameters.
71
71
FromFile string
72
+
73
+ // FromExistingClassName specifies the name of a pre-installed
74
+ // StorageClass that will be copied and used for the tests.
75
+ FromExistingClassName string
72
76
}
73
77
74
78
// SnapshotClass must be set to enable snapshotting tests.
@@ -233,7 +237,7 @@ func (d *driverDefinition) SkipUnsupportedTest(pattern testpatterns.TestPattern)
233
237
case "" :
234
238
supported = true
235
239
case testpatterns .DynamicPV :
236
- if d .StorageClass .FromName || d .StorageClass .FromFile != "" {
240
+ if d .StorageClass .FromName || d .StorageClass .FromFile != "" || d . StorageClass . FromExistingClassName != "" {
237
241
supported = true
238
242
}
239
243
case testpatterns .CSIInlineVolume :
@@ -258,39 +262,44 @@ func (d *driverDefinition) SkipUnsupportedTest(pattern testpatterns.TestPattern)
258
262
}
259
263
260
264
func (d * driverDefinition ) GetDynamicProvisionStorageClass (config * testsuites.PerTestConfig , fsType string ) * storagev1.StorageClass {
265
+ var (
266
+ sc * storagev1.StorageClass
267
+ err error
268
+ )
269
+
261
270
f := config .Framework
262
271
263
- if d . StorageClass . FromName {
264
- provisioner := d . DriverInfo . Name
265
- parameters := map [ string ] string { }
266
- ns := f . Namespace . Name
267
- suffix := provisioner + "-sc"
268
- if fsType != "" {
269
- parameters [ "csi.storage.k8s.io/fstype" ] = fsType
270
- }
272
+ switch {
273
+ case d . StorageClass . FromName :
274
+ sc = & storagev1. StorageClass { Provisioner : d . DriverInfo . Name }
275
+ case d . StorageClass . FromExistingClassName != "" :
276
+ sc , err = f . ClientSet . StorageV1 (). StorageClasses (). Get ( d . StorageClass . FromExistingClassName , metav1. GetOptions {})
277
+ framework . ExpectNoError ( err , "getting storage class %s" , d . StorageClass . FromExistingClassName )
278
+ case d . StorageClass . FromFile != "" :
279
+ var ok bool
271
280
272
- return testsuites .GetStorageClass (provisioner , parameters , nil , ns , suffix )
273
- }
281
+ items , err := utils .LoadFromManifests (d .StorageClass .FromFile )
282
+ framework .ExpectNoError (err , "load storage class from %s" , d .StorageClass .FromFile )
283
+ framework .ExpectEqual (len (items ), 1 , "exactly one item from %s" , d .StorageClass .FromFile )
284
+
285
+ err = utils .PatchItems (f , items ... )
286
+ framework .ExpectNoError (err , "patch items" )
274
287
275
- items , err := utils . LoadFromManifests ( d .StorageClass . FromFile )
276
- framework .ExpectNoError ( err , "load storage class from %s" , d .StorageClass .FromFile )
277
- framework . ExpectEqual ( len ( items ), 1 , "exactly one item from %s" , d . StorageClass . FromFile )
288
+ sc , ok = items [ 0 ].( * storagev1 .StorageClass )
289
+ framework .ExpectEqual ( ok , true , " storage class from %s" , d .StorageClass .FromFile )
290
+ }
278
291
279
- err = utils .PatchItems (f , items ... )
280
- framework .ExpectNoError (err , "patch items" )
292
+ framework .ExpectNotEqual (sc , nil , "storage class is unexpectantly nil" )
281
293
282
- sc , ok := items [0 ].(* storagev1.StorageClass )
283
- framework .ExpectEqual (ok , true , "storage class from %s" , d .StorageClass .FromFile )
284
- // Ensure that we can load more than once as required for
285
- // GetDynamicProvisionStorageClass by adding a random suffix.
286
- sc .Name = names .SimpleNameGenerator .GenerateName (sc .Name + "-" )
287
294
if fsType != "" {
288
295
if sc .Parameters == nil {
289
296
sc .Parameters = map [string ]string {}
290
297
}
298
+ // This limits the external storage test suite to only CSI drivers, which may need to be
299
+ // reconsidered if we eventually need to move in-tree storage tests out.
291
300
sc .Parameters ["csi.storage.k8s.io/fstype" ] = fsType
292
301
}
293
- return sc
302
+ return testsuites . GetStorageClass ( sc . Provisioner , sc . Parameters , sc . VolumeBindingMode , f . Namespace . Name , "e2e-sc" )
294
303
}
295
304
296
305
func (d * driverDefinition ) GetSnapshotClass (config * testsuites.PerTestConfig ) * unstructured.Unstructured {
0 commit comments