mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-02 16:29:21 +00:00
Add an option to external storage e2es to use a copy of a pre-installed StorageClass
Change-Id: I9d7f0384d0071caa41a8d98eea4afa5b17ad0ea3
This commit is contained in:
parent
845b232321
commit
0c40daddb0
2
test/e2e/storage/external/BUILD
vendored
2
test/e2e/storage/external/BUILD
vendored
@ -7,11 +7,11 @@ go_library(
|
|||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//staging/src/k8s.io/api/storage/v1:go_default_library",
|
"//staging/src/k8s.io/api/storage/v1:go_default_library",
|
||||||
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library",
|
|
||||||
"//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library",
|
"//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library",
|
||||||
"//test/e2e/framework:go_default_library",
|
"//test/e2e/framework:go_default_library",
|
||||||
"//test/e2e/framework/config:go_default_library",
|
"//test/e2e/framework/config:go_default_library",
|
||||||
|
45
test/e2e/storage/external/external.go
vendored
45
test/e2e/storage/external/external.go
vendored
@ -23,11 +23,11 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apiserver/pkg/storage/names"
|
|
||||||
"k8s.io/client-go/kubernetes/scheme"
|
"k8s.io/client-go/kubernetes/scheme"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
"k8s.io/kubernetes/test/e2e/framework/config"
|
"k8s.io/kubernetes/test/e2e/framework/config"
|
||||||
@ -69,6 +69,10 @@ type driverDefinition struct {
|
|||||||
// This can be used when the storage class is meant to have
|
// This can be used when the storage class is meant to have
|
||||||
// additional parameters.
|
// additional parameters.
|
||||||
FromFile string
|
FromFile string
|
||||||
|
|
||||||
|
// FromExistingClassName specifies the name of a pre-installed
|
||||||
|
// StorageClass that will be copied and used for the tests.
|
||||||
|
FromExistingClassName string
|
||||||
}
|
}
|
||||||
|
|
||||||
// SnapshotClass must be set to enable snapshotting tests.
|
// SnapshotClass must be set to enable snapshotting tests.
|
||||||
@ -233,7 +237,7 @@ func (d *driverDefinition) SkipUnsupportedTest(pattern testpatterns.TestPattern)
|
|||||||
case "":
|
case "":
|
||||||
supported = true
|
supported = true
|
||||||
case testpatterns.DynamicPV:
|
case testpatterns.DynamicPV:
|
||||||
if d.StorageClass.FromName || d.StorageClass.FromFile != "" {
|
if d.StorageClass.FromName || d.StorageClass.FromFile != "" || d.StorageClass.FromExistingClassName != "" {
|
||||||
supported = true
|
supported = true
|
||||||
}
|
}
|
||||||
case testpatterns.CSIInlineVolume:
|
case testpatterns.CSIInlineVolume:
|
||||||
@ -258,19 +262,21 @@ func (d *driverDefinition) SkipUnsupportedTest(pattern testpatterns.TestPattern)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *driverDefinition) GetDynamicProvisionStorageClass(config *testsuites.PerTestConfig, fsType string) *storagev1.StorageClass {
|
func (d *driverDefinition) GetDynamicProvisionStorageClass(config *testsuites.PerTestConfig, fsType string) *storagev1.StorageClass {
|
||||||
|
var (
|
||||||
|
sc *storagev1.StorageClass
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
f := config.Framework
|
f := config.Framework
|
||||||
|
|
||||||
if d.StorageClass.FromName {
|
switch {
|
||||||
provisioner := d.DriverInfo.Name
|
case d.StorageClass.FromName:
|
||||||
parameters := map[string]string{}
|
sc = &storagev1.StorageClass{Provisioner: d.DriverInfo.Name}
|
||||||
ns := f.Namespace.Name
|
case d.StorageClass.FromExistingClassName != "":
|
||||||
suffix := provisioner + "-sc"
|
sc, err = f.ClientSet.StorageV1().StorageClasses().Get(d.StorageClass.FromExistingClassName, metav1.GetOptions{})
|
||||||
if fsType != "" {
|
framework.ExpectNoError(err, "getting storage class %s", d.StorageClass.FromExistingClassName)
|
||||||
parameters["csi.storage.k8s.io/fstype"] = fsType
|
case d.StorageClass.FromFile != "":
|
||||||
}
|
var ok bool
|
||||||
|
|
||||||
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
|
||||||
}
|
|
||||||
|
|
||||||
items, err := utils.LoadFromManifests(d.StorageClass.FromFile)
|
items, err := utils.LoadFromManifests(d.StorageClass.FromFile)
|
||||||
framework.ExpectNoError(err, "load storage class from %s", d.StorageClass.FromFile)
|
framework.ExpectNoError(err, "load storage class from %s", d.StorageClass.FromFile)
|
||||||
@ -279,18 +285,21 @@ func (d *driverDefinition) GetDynamicProvisionStorageClass(config *testsuites.Pe
|
|||||||
err = utils.PatchItems(f, items...)
|
err = utils.PatchItems(f, items...)
|
||||||
framework.ExpectNoError(err, "patch items")
|
framework.ExpectNoError(err, "patch items")
|
||||||
|
|
||||||
sc, ok := items[0].(*storagev1.StorageClass)
|
sc, ok = items[0].(*storagev1.StorageClass)
|
||||||
framework.ExpectEqual(ok, true, "storage class from %s", d.StorageClass.FromFile)
|
framework.ExpectEqual(ok, true, "storage class from %s", d.StorageClass.FromFile)
|
||||||
// Ensure that we can load more than once as required for
|
}
|
||||||
// GetDynamicProvisionStorageClass by adding a random suffix.
|
|
||||||
sc.Name = names.SimpleNameGenerator.GenerateName(sc.Name + "-")
|
framework.ExpectNotEqual(sc, nil, "storage class is unexpectantly nil")
|
||||||
|
|
||||||
if fsType != "" {
|
if fsType != "" {
|
||||||
if sc.Parameters == nil {
|
if sc.Parameters == nil {
|
||||||
sc.Parameters = map[string]string{}
|
sc.Parameters = map[string]string{}
|
||||||
}
|
}
|
||||||
|
// This limits the external storage test suite to only CSI drivers, which may need to be
|
||||||
|
// reconsidered if we eventually need to move in-tree storage tests out.
|
||||||
sc.Parameters["csi.storage.k8s.io/fstype"] = fsType
|
sc.Parameters["csi.storage.k8s.io/fstype"] = fsType
|
||||||
}
|
}
|
||||||
return sc
|
return testsuites.GetStorageClass(sc.Provisioner, sc.Parameters, sc.VolumeBindingMode, f.Namespace.Name, "e2e-sc")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *driverDefinition) GetSnapshotClass(config *testsuites.PerTestConfig) *unstructured.Unstructured {
|
func (d *driverDefinition) GetSnapshotClass(config *testsuites.PerTestConfig) *unstructured.Unstructured {
|
||||||
|
Loading…
Reference in New Issue
Block a user