Merge pull request #126145 from carlory/kep-3751-api

[KEP-3751] Promote VolumeAttributesClass to beta
This commit is contained in:
Kubernetes Prow Robot
2024-07-23 13:31:05 -07:00
committed by GitHub
57 changed files with 5233 additions and 208 deletions

View File

@@ -54,7 +54,7 @@ import (
v1 "k8s.io/api/core/v1"
rbacv1 "k8s.io/api/rbac/v1"
storagev1 "k8s.io/api/storage/v1"
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
storagev1beta1 "k8s.io/api/storage/v1beta1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -215,8 +215,8 @@ func (h *hostpathCSIDriver) GetSnapshotClass(ctx context.Context, config *storag
return utils.GenerateSnapshotClassSpec(snapshotter, parameters, ns)
}
func (h *hostpathCSIDriver) GetVolumeAttributesClass(_ context.Context, config *storageframework.PerTestConfig) *storagev1alpha1.VolumeAttributesClass {
return storageframework.CopyVolumeAttributesClass(&storagev1alpha1.VolumeAttributesClass{
func (h *hostpathCSIDriver) GetVolumeAttributesClass(_ context.Context, config *storageframework.PerTestConfig) *storagev1beta1.VolumeAttributesClass {
return storageframework.CopyVolumeAttributesClass(&storagev1beta1.VolumeAttributesClass{
DriverName: config.GetUniqueDriverName(),
Parameters: map[string]string{
hostpathCSIDriverMutableParameterName: hostpathCSIDriverMutableParameterValue,

View File

@@ -25,7 +25,7 @@ import (
"time"
storagev1 "k8s.io/api/storage/v1"
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
storagev1beta1 "k8s.io/api/storage/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
@@ -430,23 +430,23 @@ func (d *driverDefinition) GetSnapshotClass(ctx context.Context, e2econfig *stor
return utils.GenerateSnapshotClassSpec(snapshotter, parameters, ns)
}
func (d *driverDefinition) GetVolumeAttributesClass(ctx context.Context, e2econfig *storageframework.PerTestConfig) *storagev1alpha1.VolumeAttributesClass {
func (d *driverDefinition) GetVolumeAttributesClass(ctx context.Context, e2econfig *storageframework.PerTestConfig) *storagev1beta1.VolumeAttributesClass {
if !d.VolumeAttributesClass.FromName && d.VolumeAttributesClass.FromFile == "" && d.VolumeAttributesClass.FromExistingClassName == "" {
e2eskipper.Skipf("Driver %q has no configured VolumeAttributesClass - skipping", d.DriverInfo.Name)
return nil
}
var (
vac *storagev1alpha1.VolumeAttributesClass
vac *storagev1beta1.VolumeAttributesClass
err error
)
f := e2econfig.Framework
switch {
case d.VolumeAttributesClass.FromName:
vac = &storagev1alpha1.VolumeAttributesClass{DriverName: d.DriverInfo.Name}
vac = &storagev1beta1.VolumeAttributesClass{DriverName: d.DriverInfo.Name}
case d.VolumeAttributesClass.FromExistingClassName != "":
vac, err = f.ClientSet.StorageV1alpha1().VolumeAttributesClasses().Get(ctx, d.VolumeAttributesClass.FromExistingClassName, metav1.GetOptions{})
vac, err = f.ClientSet.StorageV1beta1().VolumeAttributesClasses().Get(ctx, d.VolumeAttributesClass.FromExistingClassName, metav1.GetOptions{})
framework.ExpectNoError(err, "getting VolumeAttributesClass %s", d.VolumeAttributesClass.FromExistingClassName)
case d.VolumeAttributesClass.FromFile != "":
var ok bool
@@ -456,7 +456,7 @@ func (d *driverDefinition) GetVolumeAttributesClass(ctx context.Context, e2econf
err = utils.PatchItems(f, f.Namespace, items...)
framework.ExpectNoError(err, "patch VolumeAttributesClass from %s", d.VolumeAttributesClass.FromFile)
vac, ok = items[0].(*storagev1alpha1.VolumeAttributesClass)
vac, ok = items[0].(*storagev1beta1.VolumeAttributesClass)
if !ok {
framework.Failf("cast VolumeAttributesClass from %s", d.VolumeAttributesClass.FromFile)
}

View File

@@ -21,7 +21,7 @@ import (
"fmt"
storagev1 "k8s.io/api/storage/v1"
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
storagev1beta1 "k8s.io/api/storage/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apiserver/pkg/storage/names"
"k8s.io/kubernetes/pkg/volume/util"
@@ -97,7 +97,7 @@ func GetStorageClass(
// CopyVolumeAttributesClass constructs a new VolumeAttributesClass instance
// with a unique name that is based on namespace + suffix
// using the VolumeAttributesClass passed in as a parameter
func CopyVolumeAttributesClass(vac *storagev1alpha1.VolumeAttributesClass, ns string, suffix string) *storagev1alpha1.VolumeAttributesClass {
func CopyVolumeAttributesClass(vac *storagev1beta1.VolumeAttributesClass, ns string, suffix string) *storagev1beta1.VolumeAttributesClass {
copy := vac.DeepCopy()
copy.ObjectMeta.Name = names.SimpleNameGenerator.GenerateName(ns + "-" + suffix)
copy.ResourceVersion = ""

View File

@@ -22,7 +22,7 @@ import (
v1 "k8s.io/api/core/v1"
storagev1 "k8s.io/api/storage/v1"
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
storagev1beta1 "k8s.io/api/storage/v1beta1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/kubernetes/test/e2e/framework"
@@ -137,7 +137,7 @@ type VolumeAttributesClassTestDriver interface {
TestDriver
// GetVolumeAttributesClass returns a VolumeAttributesClass to create/modify PVCs
// It will return nil if the TestDriver does not support VACs
GetVolumeAttributesClass(ctx context.Context, config *PerTestConfig) *storagev1alpha1.VolumeAttributesClass
GetVolumeAttributesClass(ctx context.Context, config *PerTestConfig) *storagev1beta1.VolumeAttributesClass
}
// CustomTimeoutsTestDriver represents an interface fo a TestDriver that supports custom timeouts.

View File

@@ -24,7 +24,7 @@ import (
"github.com/onsi/ginkgo/v2"
"github.com/onsi/gomega"
v1 "k8s.io/api/core/v1"
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
storagev1beta1 "k8s.io/api/storage/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/errors"
@@ -98,7 +98,7 @@ func (v *volumeModifyTestSuite) DefineTests(driver storageframework.TestDriver,
config *storageframework.PerTestConfig
resource *storageframework.VolumeResource
vac *storagev1alpha1.VolumeAttributesClass
vac *storagev1beta1.VolumeAttributesClass
}
var l local
@@ -119,7 +119,7 @@ func (v *volumeModifyTestSuite) DefineTests(driver storageframework.TestDriver,
}
ginkgo.By("Creating VolumeAttributesClass")
_, err := f.ClientSet.StorageV1alpha1().VolumeAttributesClasses().Create(ctx, l.vac, metav1.CreateOptions{})
_, err := f.ClientSet.StorageV1beta1().VolumeAttributesClasses().Create(ctx, l.vac, metav1.CreateOptions{})
framework.ExpectNoError(err, "While creating VolumeAttributesClass")
ginkgo.By("Creating volume")
@@ -206,7 +206,7 @@ func (v *volumeModifyTestSuite) DefineTests(driver storageframework.TestDriver,
vacDriver, _ := driver.(storageframework.VolumeAttributesClassTestDriver)
newVAC := vacDriver.GetVolumeAttributesClass(ctx, l.config)
gomega.Expect(newVAC).NotTo(gomega.BeNil())
_, err := f.ClientSet.StorageV1alpha1().VolumeAttributesClasses().Create(ctx, newVAC, metav1.CreateOptions{})
_, err := f.ClientSet.StorageV1beta1().VolumeAttributesClasses().Create(ctx, newVAC, metav1.CreateOptions{})
framework.ExpectNoError(err, "While creating new VolumeAttributesClass")
ginkgo.DeferCleanup(CleanupVAC, newVAC, f.ClientSet, vacCleanupWaitPeriod)
@@ -266,9 +266,9 @@ func WaitForVolumeModification(ctx context.Context, pvc *v1.PersistentVolumeClai
}, timeout, modifyPollInterval).Should(gomega.Succeed())
}
func CleanupVAC(ctx context.Context, vac *storagev1alpha1.VolumeAttributesClass, c clientset.Interface, timeout time.Duration) {
func CleanupVAC(ctx context.Context, vac *storagev1beta1.VolumeAttributesClass, c clientset.Interface, timeout time.Duration) {
gomega.Eventually(ctx, func() error {
return c.StorageV1alpha1().VolumeAttributesClasses().Delete(ctx, vac.Name, metav1.DeleteOptions{})
return c.StorageV1beta1().VolumeAttributesClasses().Delete(ctx, vac.Name, metav1.DeleteOptions{})
}, timeout, modifyPollInterval).Should(gomega.BeNil())
}

View File

@@ -29,7 +29,7 @@ import (
v1 "k8s.io/api/core/v1"
rbacv1 "k8s.io/api/rbac/v1"
storagev1 "k8s.io/api/storage/v1"
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
storagev1beta1 "k8s.io/api/storage/v1beta1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -316,7 +316,7 @@ func patchItemRecursively(f *framework.Framework, driverNamespace *v1.Namespace,
PatchName(f, &item.Name)
case *storagev1.StorageClass:
PatchName(f, &item.Name)
case *storagev1alpha1.VolumeAttributesClass:
case *storagev1beta1.VolumeAttributesClass:
PatchName(f, &item.Name)
case *storagev1.CSIDriver:
PatchName(f, &item.Name)
@@ -625,16 +625,16 @@ func (*storageClassFactory) Create(ctx context.Context, f *framework.Framework,
type volumeAttributesClassFactory struct{}
func (f *volumeAttributesClassFactory) New() runtime.Object {
return &storagev1alpha1.VolumeAttributesClass{}
return &storagev1beta1.VolumeAttributesClass{}
}
func (*volumeAttributesClassFactory) Create(ctx context.Context, f *framework.Framework, ns *v1.Namespace, i interface{}) (func(ctx context.Context) error, error) {
item, ok := i.(*storagev1alpha1.VolumeAttributesClass)
item, ok := i.(*storagev1beta1.VolumeAttributesClass)
if !ok {
return nil, errorItemNotSupported
}
client := f.ClientSet.StorageV1alpha1().VolumeAttributesClasses()
client := f.ClientSet.StorageV1beta1().VolumeAttributesClasses()
if _, err := client.Create(ctx, item, metav1.CreateOptions{}); err != nil {
return nil, fmt.Errorf("create VolumeAttributesClass: %w", err)
}

View File

@@ -21,7 +21,7 @@ import (
"fmt"
"time"
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
storagev1beta1 "k8s.io/api/storage/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
types "k8s.io/apimachinery/pkg/types"
@@ -51,10 +51,10 @@ var _ = utils.SIGDescribe("VolumeAttributesClass", feature.VolumeAttributesClass
*/
framework.It("should run through the lifecycle of a VolumeAttributesClass", func(ctx context.Context) {
vacClient := f.ClientSet.StorageV1alpha1().VolumeAttributesClasses()
var initialVAC, replacementVAC *storagev1alpha1.VolumeAttributesClass
vacClient := f.ClientSet.StorageV1beta1().VolumeAttributesClasses()
var initialVAC, replacementVAC *storagev1beta1.VolumeAttributesClass
initialVAC = &storagev1alpha1.VolumeAttributesClass{
initialVAC = &storagev1beta1.VolumeAttributesClass{
TypeMeta: metav1.TypeMeta{
Kind: "VolumeAttributesClass",
},
@@ -89,7 +89,7 @@ var _ = utils.SIGDescribe("VolumeAttributesClass", feature.VolumeAttributesClass
vacSelector := labels.Set{patchedVolumeAttributesClass.Name: "patched"}.AsSelector().String()
type state struct {
VolumeAttributesClasses []storagev1alpha1.VolumeAttributesClass
VolumeAttributesClasses []storagev1beta1.VolumeAttributesClass
}
err = framework.Gomega().Eventually(ctx, framework.HandleRetry(func(ctx context.Context) (*state, error) {
@@ -112,7 +112,7 @@ var _ = utils.SIGDescribe("VolumeAttributesClass", feature.VolumeAttributesClass
ginkgo.By("Create a replacement VolumeAttributesClass")
replacementVAC = &storagev1alpha1.VolumeAttributesClass{
replacementVAC = &storagev1beta1.VolumeAttributesClass{
TypeMeta: metav1.TypeMeta{
Kind: "VolumeAttributesClass",
},
@@ -129,7 +129,7 @@ var _ = utils.SIGDescribe("VolumeAttributesClass", feature.VolumeAttributesClass
framework.ExpectNoError(err, "failed to create replacement VolumeAttributesClass")
ginkgo.By(fmt.Sprintf("Updating VolumeAttributesClass %q", replacementVolumeAttributesClass.Name))
var updatedVolumeAttributesClass *storagev1alpha1.VolumeAttributesClass
var updatedVolumeAttributesClass *storagev1beta1.VolumeAttributesClass
err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
vac, err := vacClient.Get(ctx, replacementVolumeAttributesClass.Name, metav1.GetOptions{})

View File

@@ -271,6 +271,14 @@ func GetEtcdStorageDataForNamespace(namespace string) map[schema.GroupVersionRes
gvr("storage.k8s.io", "v1alpha1", "volumeattributesclasses"): {
Stub: `{"metadata": {"name": "vac1"}, "driverName": "example.com/driver", "parameters": {"foo": "bar"}}`,
ExpectedEtcdPath: "/registry/volumeattributesclasses/vac1",
ExpectedGVK: gvkP("storage.k8s.io", "v1beta1", "VolumeAttributesClass"),
},
// --
// k8s.io/kubernetes/pkg/apis/storage/v1beta1
gvr("storage.k8s.io", "v1beta1", "volumeattributesclasses"): {
Stub: `{"metadata": {"name": "vac2"}, "driverName": "example.com/driver", "parameters": {"foo": "bar"}}`,
ExpectedEtcdPath: "/registry/volumeattributesclasses/vac2",
},
// --