mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 02:41:25 +00:00
Merge pull request #76625 from gnufied/skip-if-no-default-sc
Skip storage tests that depend on default SC - if no default SC is found
This commit is contained in:
commit
dc08b6b275
@ -94,6 +94,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
// StorageClass and a dynamic provisioner.
|
// StorageClass and a dynamic provisioner.
|
||||||
ginkgo.It("should provide basic identity", func() {
|
ginkgo.It("should provide basic identity", func() {
|
||||||
ginkgo.By("Creating statefulset " + ssName + " in namespace " + ns)
|
ginkgo.By("Creating statefulset " + ssName + " in namespace " + ns)
|
||||||
|
framework.SkipIfNoDefaultStorageClass(c)
|
||||||
*(ss.Spec.Replicas) = 3
|
*(ss.Spec.Replicas) = 3
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.PauseNewPods(ss)
|
sst.PauseNewPods(ss)
|
||||||
@ -133,6 +134,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
// StorageClass and a dynamic provisioner.
|
// StorageClass and a dynamic provisioner.
|
||||||
ginkgo.It("should adopt matching orphans and release non-matching pods", func() {
|
ginkgo.It("should adopt matching orphans and release non-matching pods", func() {
|
||||||
ginkgo.By("Creating statefulset " + ssName + " in namespace " + ns)
|
ginkgo.By("Creating statefulset " + ssName + " in namespace " + ns)
|
||||||
|
framework.SkipIfNoDefaultStorageClass(c)
|
||||||
*(ss.Spec.Replicas) = 1
|
*(ss.Spec.Replicas) = 1
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.PauseNewPods(ss)
|
sst.PauseNewPods(ss)
|
||||||
@ -218,6 +220,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
// StorageClass and a dynamic provisioner.
|
// StorageClass and a dynamic provisioner.
|
||||||
ginkgo.It("should not deadlock when a pod's predecessor fails", func() {
|
ginkgo.It("should not deadlock when a pod's predecessor fails", func() {
|
||||||
ginkgo.By("Creating statefulset " + ssName + " in namespace " + ns)
|
ginkgo.By("Creating statefulset " + ssName + " in namespace " + ns)
|
||||||
|
framework.SkipIfNoDefaultStorageClass(c)
|
||||||
*(ss.Spec.Replicas) = 2
|
*(ss.Spec.Replicas) = 2
|
||||||
sst := framework.NewStatefulSetTester(c)
|
sst := framework.NewStatefulSetTester(c)
|
||||||
sst.PauseNewPods(ss)
|
sst.PauseNewPods(ss)
|
||||||
@ -254,6 +257,7 @@ var _ = SIGDescribe("StatefulSet", func() {
|
|||||||
// StorageClass and a dynamic provisioner.
|
// StorageClass and a dynamic provisioner.
|
||||||
ginkgo.It("should perform rolling updates and roll backs of template modifications with PVCs", func() {
|
ginkgo.It("should perform rolling updates and roll backs of template modifications with PVCs", func() {
|
||||||
ginkgo.By("Creating a new StatefulSet with PVCs")
|
ginkgo.By("Creating a new StatefulSet with PVCs")
|
||||||
|
framework.SkipIfNoDefaultStorageClass(c)
|
||||||
*(ss.Spec.Replicas) = 3
|
*(ss.Spec.Replicas) = 3
|
||||||
rollbackTest(c, ns, ss)
|
rollbackTest(c, ns, ss)
|
||||||
})
|
})
|
||||||
|
@ -41,6 +41,7 @@ go_library(
|
|||||||
"//pkg/apis/batch:go_default_library",
|
"//pkg/apis/batch:go_default_library",
|
||||||
"//pkg/apis/core:go_default_library",
|
"//pkg/apis/core:go_default_library",
|
||||||
"//pkg/apis/extensions:go_default_library",
|
"//pkg/apis/extensions:go_default_library",
|
||||||
|
"//pkg/apis/storage/v1/util:go_default_library",
|
||||||
"//pkg/client/conditions:go_default_library",
|
"//pkg/client/conditions:go_default_library",
|
||||||
"//pkg/controller:go_default_library",
|
"//pkg/controller:go_default_library",
|
||||||
"//pkg/controller/deployment/util:go_default_library",
|
"//pkg/controller/deployment/util:go_default_library",
|
||||||
|
@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/apimachinery/pkg/util/uuid"
|
"k8s.io/apimachinery/pkg/util/uuid"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
|
storageutil "k8s.io/kubernetes/pkg/apis/storage/v1/util"
|
||||||
"k8s.io/kubernetes/pkg/volume/util"
|
"k8s.io/kubernetes/pkg/volume/util"
|
||||||
imageutils "k8s.io/kubernetes/test/utils/image"
|
imageutils "k8s.io/kubernetes/test/utils/image"
|
||||||
)
|
)
|
||||||
@ -1021,3 +1022,33 @@ func GetBoundPV(client clientset.Interface, pvc *v1.PersistentVolumeClaim) (*v1.
|
|||||||
pv, err := client.CoreV1().PersistentVolumes().Get(claim.Spec.VolumeName, metav1.GetOptions{})
|
pv, err := client.CoreV1().PersistentVolumes().Get(claim.Spec.VolumeName, metav1.GetOptions{})
|
||||||
return pv, err
|
return pv, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultStorageClassName returns default storageClass or return error
|
||||||
|
func GetDefaultStorageClassName(c clientset.Interface) (string, error) {
|
||||||
|
list, err := c.StorageV1().StorageClasses().List(metav1.ListOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("Error listing storage classes: %v", err)
|
||||||
|
}
|
||||||
|
var scName string
|
||||||
|
for _, sc := range list.Items {
|
||||||
|
if storageutil.IsDefaultAnnotation(sc.ObjectMeta) {
|
||||||
|
if len(scName) != 0 {
|
||||||
|
return "", fmt.Errorf("Multiple default storage classes found: %q and %q", scName, sc.Name)
|
||||||
|
}
|
||||||
|
scName = sc.Name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(scName) == 0 {
|
||||||
|
return "", fmt.Errorf("No default storage class found")
|
||||||
|
}
|
||||||
|
Logf("Default storage class: %q", scName)
|
||||||
|
return scName, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SkipIfNoDefaultStorageClass skips tests if no default SC can be found.
|
||||||
|
func SkipIfNoDefaultStorageClass(c clientset.Interface) {
|
||||||
|
_, err := GetDefaultStorageClassName(c)
|
||||||
|
if err != nil {
|
||||||
|
Skipf("error finding default storageClass : %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -48,12 +48,11 @@ var _ = utils.SIGDescribe("PVC Protection", func() {
|
|||||||
|
|
||||||
By("Creating a PVC")
|
By("Creating a PVC")
|
||||||
suffix := "pvc-protection"
|
suffix := "pvc-protection"
|
||||||
defaultSC := getDefaultStorageClassName(client)
|
framework.SkipIfNoDefaultStorageClass(client)
|
||||||
testStorageClass := testsuites.StorageClassTest{
|
testStorageClass := testsuites.StorageClassTest{
|
||||||
ClaimSize: "1Gi",
|
ClaimSize: "1Gi",
|
||||||
}
|
}
|
||||||
pvc = newClaim(testStorageClass, nameSpace, suffix)
|
pvc = newClaim(testStorageClass, nameSpace, suffix)
|
||||||
pvc.Spec.StorageClassName = &defaultSC
|
|
||||||
pvc, err = client.CoreV1().PersistentVolumeClaims(pvc.Namespace).Create(pvc)
|
pvc, err = client.CoreV1().PersistentVolumeClaims(pvc.Namespace).Create(pvc)
|
||||||
framework.ExpectNoError(err, "Error creating PVC")
|
framework.ExpectNoError(err, "Error creating PVC")
|
||||||
pvcCreatedAndNotDeleted = true
|
pvcCreatedAndNotDeleted = true
|
||||||
|
@ -52,17 +52,19 @@ var _ = utils.SIGDescribe("[Serial] Volume metrics", func() {
|
|||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
c = f.ClientSet
|
c = f.ClientSet
|
||||||
ns = f.Namespace.Name
|
ns = f.Namespace.Name
|
||||||
|
var err error
|
||||||
framework.SkipUnlessProviderIs("gce", "gke", "aws")
|
framework.SkipUnlessProviderIs("gce", "gke", "aws")
|
||||||
defaultScName = getDefaultStorageClassName(c)
|
defaultScName, err = framework.GetDefaultStorageClassName(c)
|
||||||
verifyDefaultStorageClass(c, defaultScName, true)
|
if err != nil {
|
||||||
|
framework.Failf(err.Error())
|
||||||
|
}
|
||||||
test := testsuites.StorageClassTest{
|
test := testsuites.StorageClassTest{
|
||||||
Name: "default",
|
Name: "default",
|
||||||
ClaimSize: "2Gi",
|
ClaimSize: "2Gi",
|
||||||
}
|
}
|
||||||
|
|
||||||
pvc = newClaim(test, ns, "default")
|
pvc = newClaim(test, ns, "default")
|
||||||
var err error
|
|
||||||
metricsGrabber, err = metrics.NewMetricsGrabber(c, nil, true, false, true, false, false)
|
metricsGrabber, err = metrics.NewMetricsGrabber(c, nil, true, false, true, false, false)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -775,7 +775,10 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
|
|||||||
// Modifying the default storage class can be disruptive to other tests that depend on it
|
// Modifying the default storage class can be disruptive to other tests that depend on it
|
||||||
It("should be disabled by changing the default annotation [Serial] [Disruptive]", func() {
|
It("should be disabled by changing the default annotation [Serial] [Disruptive]", func() {
|
||||||
framework.SkipUnlessProviderIs("openstack", "gce", "aws", "gke", "vsphere", "azure")
|
framework.SkipUnlessProviderIs("openstack", "gce", "aws", "gke", "vsphere", "azure")
|
||||||
scName := getDefaultStorageClassName(c)
|
scName, scErr := framework.GetDefaultStorageClassName(c)
|
||||||
|
if scErr != nil {
|
||||||
|
framework.Failf(scErr.Error())
|
||||||
|
}
|
||||||
test := testsuites.StorageClassTest{
|
test := testsuites.StorageClassTest{
|
||||||
Name: "default",
|
Name: "default",
|
||||||
ClaimSize: "2Gi",
|
ClaimSize: "2Gi",
|
||||||
@ -806,7 +809,10 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
|
|||||||
// Modifying the default storage class can be disruptive to other tests that depend on it
|
// Modifying the default storage class can be disruptive to other tests that depend on it
|
||||||
It("should be disabled by removing the default annotation [Serial] [Disruptive]", func() {
|
It("should be disabled by removing the default annotation [Serial] [Disruptive]", func() {
|
||||||
framework.SkipUnlessProviderIs("openstack", "gce", "aws", "gke", "vsphere", "azure")
|
framework.SkipUnlessProviderIs("openstack", "gce", "aws", "gke", "vsphere", "azure")
|
||||||
scName := getDefaultStorageClassName(c)
|
scName, scErr := framework.GetDefaultStorageClassName(c)
|
||||||
|
if scErr != nil {
|
||||||
|
framework.Failf(scErr.Error())
|
||||||
|
}
|
||||||
test := testsuites.StorageClassTest{
|
test := testsuites.StorageClassTest{
|
||||||
Name: "default",
|
Name: "default",
|
||||||
ClaimSize: "2Gi",
|
ClaimSize: "2Gi",
|
||||||
@ -975,27 +981,6 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
func getDefaultStorageClassName(c clientset.Interface) string {
|
|
||||||
list, err := c.StorageV1().StorageClasses().List(metav1.ListOptions{})
|
|
||||||
if err != nil {
|
|
||||||
framework.Failf("Error listing storage classes: %v", err)
|
|
||||||
}
|
|
||||||
var scName string
|
|
||||||
for _, sc := range list.Items {
|
|
||||||
if storageutil.IsDefaultAnnotation(sc.ObjectMeta) {
|
|
||||||
if len(scName) != 0 {
|
|
||||||
framework.Failf("Multiple default storage classes found: %q and %q", scName, sc.Name)
|
|
||||||
}
|
|
||||||
scName = sc.Name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(scName) == 0 {
|
|
||||||
framework.Failf("No default storage class found")
|
|
||||||
}
|
|
||||||
framework.Logf("Default storage class: %q", scName)
|
|
||||||
return scName
|
|
||||||
}
|
|
||||||
|
|
||||||
func verifyDefaultStorageClass(c clientset.Interface, scName string, expectedDefault bool) {
|
func verifyDefaultStorageClass(c clientset.Interface, scName string, expectedDefault bool) {
|
||||||
sc, err := c.StorageV1().StorageClasses().Get(scName, metav1.GetOptions{})
|
sc, err := c.StorageV1().StorageClasses().Get(scName, metav1.GetOptions{})
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
Loading…
Reference in New Issue
Block a user