Skip to content

Commit 28d359b

Browse files
committed
promote HonorPVReclaimPolicy to GA
Signed-off-by: carlory <[email protected]>
1 parent a18b4a8 commit 28d359b

File tree

9 files changed

+39
-56
lines changed

9 files changed

+39
-56
lines changed

pkg/controller/volume/persistentvolume/delete_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
v1 "k8s.io/api/core/v1"
2424
storage "k8s.io/api/storage/v1"
25+
"k8s.io/apimachinery/pkg/util/version"
2526
utilfeature "k8s.io/apiserver/pkg/util/feature"
2627
featuregatetesting "k8s.io/component-base/featuregate/testing"
2728
"k8s.io/component-helpers/storage/volume"
@@ -37,6 +38,8 @@ import (
3738
func TestDeleteSync(t *testing.T) {
3839
const gceDriver = "pd.csi.storage.gke.io"
3940
// Default enable the HonorPVReclaimPolicy feature gate.
41+
// TODO: this will be removed in 1.36
42+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.32"))
4043
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.HonorPVReclaimPolicy, true)
4144
_, ctx := ktesting.NewTestContext(t)
4245
tests := []controllerTest{

pkg/controller/volume/persistentvolume/provision_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
storage "k8s.io/api/storage/v1"
3030
apierrors "k8s.io/apimachinery/pkg/api/errors"
3131
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
32+
"k8s.io/apimachinery/pkg/util/version"
3233
corelisters "k8s.io/client-go/listers/core/v1"
3334
"k8s.io/client-go/tools/cache"
3435
"k8s.io/component-helpers/storage/volume"
@@ -172,6 +173,8 @@ var provision2Success = provisionCall{
172173
// 3. Compare resulting volumes with expected volumes.
173174
func TestProvisionSync(t *testing.T) {
174175
// Default enable the HonorPVReclaimPolicy feature gate.
176+
// TODO: this will be removed in 1.36
177+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.32"))
175178
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.HonorPVReclaimPolicy, true)
176179
_, ctx := ktesting.NewTestContext(t)
177180
tests := []controllerTest{
@@ -599,6 +602,8 @@ func TestProvisionSync(t *testing.T) {
599602
// Some limit of calls in enforced to prevent endless loops.
600603
func TestProvisionMultiSync(t *testing.T) {
601604
// Default enable the HonorPVReclaimPolicy feature gate.
605+
// TODO: this will be removed in 1.36
606+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.32"))
602607
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.HonorPVReclaimPolicy, true)
603608

604609
_, ctx := ktesting.NewTestContext(t)

pkg/controller/volume/persistentvolume/pv_controller_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
v1 "k8s.io/api/core/v1"
2727
storagev1 "k8s.io/api/storage/v1"
2828
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29+
"k8s.io/apimachinery/pkg/util/version"
2930
"k8s.io/apimachinery/pkg/util/wait"
3031
"k8s.io/apimachinery/pkg/watch"
3132
utilfeature "k8s.io/apiserver/pkg/util/feature"
@@ -52,6 +53,8 @@ import (
5253
// either very timing-sensitive or slow to wait for real periodic sync.
5354
func TestControllerSync(t *testing.T) {
5455
// Default enable the HonorPVReclaimPolicy feature gate.
56+
// TODO: this will be removed in 1.36
57+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.32"))
5558
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.HonorPVReclaimPolicy, true)
5659
tests := []controllerTest{
5760
// [Unit test set 5] - controller tests.
@@ -602,6 +605,8 @@ func TestModifyDeletionFinalizers(t *testing.T) {
602605
// in-tree plugin is used as migration is disabled. When that plugin is migrated, a different
603606
// non-migrated one should be used. If all plugins are migrated this test can be removed. The
604607
// gce in-tree plugin is used for a migrated driver as it is feature-locked as of 1.25.
608+
// TODO: this will be removed in 1.36
609+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.32"))
605610
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.HonorPVReclaimPolicy, true)
606611
const nonmigratedDriver = "rbd.csi.ceph.com"
607612
const migratedPlugin = "kubernetes.io/gce-pd"

pkg/features/versioned_kube_features.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
380380
HonorPVReclaimPolicy: {
381381
{Version: version.MustParse("1.23"), Default: false, PreRelease: featuregate.Alpha},
382382
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta},
383+
{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.36
383384
},
384385

385386
HPAScaleToZero: {

test/e2e/feature/feature.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -192,20 +192,6 @@ var (
192192
// TODO: document the feature (owning SIG, when to use this feature for a test)
193193
HPA = framework.WithFeature(framework.ValidFeatures.Add("HPA"))
194194

195-
// owning-sig: sig-storage
196-
// kep: https://kep.k8s.io/2680
197-
// test-infra jobs:
198-
// - pull-kubernetes-e2e-storage-kind-alpha-features (need manual trigger)
199-
// - ci-kubernetes-e2e-storage-kind-alpha-features
200-
//
201-
// When this label is added to a test, it means that the cluster must be created
202-
// with the feature-gate "HonorPVReclaimPolicy=true".
203-
//
204-
// Once the feature are stable, this label should be removed and these tests will
205-
// be run by default on any cluster. The test-infra job also should be updated to
206-
// not focus on this feature anymore.
207-
HonorPVReclaimPolicy = framework.WithFeature(framework.ValidFeatures.Add("HonorPVReclaimPolicy"))
208-
209195
// owner: sig-node
210196
HostAccess = framework.WithFeature(framework.ValidFeatures.Add("HostAccess"))
211197

test/e2e/storage/csimock/base.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ type testParameters struct {
106106
fsGroupPolicy *storagev1.FSGroupPolicy
107107
enableSELinuxMount *bool
108108
enableRecoverExpansionFailure bool
109-
enableHonorPVReclaimPolicy bool
110109
enableCSINodeExpandSecret bool
111110
reclaimPolicy *v1.PersistentVolumeReclaimPolicy
112111
}
@@ -181,7 +180,6 @@ func (m *mockDriverSetup) init(ctx context.Context, tp testParameters) {
181180
FSGroupPolicy: tp.fsGroupPolicy,
182181
EnableSELinuxMount: tp.enableSELinuxMount,
183182
EnableRecoverExpansionFailure: tp.enableRecoverExpansionFailure,
184-
EnableHonorPVReclaimPolicy: tp.enableHonorPVReclaimPolicy,
185183
}
186184

187185
// At the moment, only tests which need hooks are

test/e2e/storage/csimock/csi_honor_pv_reclaim_policy.go

Lines changed: 21 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,23 @@ import (
2828
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2929
"k8s.io/client-go/util/retry"
3030
storagehelpers "k8s.io/component-helpers/storage/volume"
31-
"k8s.io/kubernetes/pkg/features"
32-
"k8s.io/kubernetes/test/e2e/feature"
3331
"k8s.io/kubernetes/test/e2e/framework"
3432
e2epv "k8s.io/kubernetes/test/e2e/framework/pv"
3533
"k8s.io/kubernetes/test/e2e/storage/utils"
3634
admissionapi "k8s.io/pod-security-admission/api"
3735
"k8s.io/utils/ptr"
3836
)
3937

40-
var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", feature.HonorPVReclaimPolicy, framework.WithFeatureGate(features.HonorPVReclaimPolicy), func() {
38+
var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", func() {
4139
f := framework.NewDefaultFramework("csi-mock-honor-pv-reclaim-policy")
4240
f.NamespacePodSecurityLevel = admissionapi.LevelPrivileged
4341
m := newMockDriverSetup(f)
4442

4543
ginkgo.Context("CSI honor pv reclaim policy using mock driver", func() {
4644
ginkgo.It("Dynamic provisioning should honor pv delete reclaim policy when deleting pvc", func(ctx context.Context) {
4745
m.init(ctx, testParameters{
48-
registerDriver: true,
49-
enableHonorPVReclaimPolicy: true,
50-
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimDelete),
46+
registerDriver: true,
47+
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimDelete),
5148
})
5249
ginkgo.DeferCleanup(m.cleanup)
5350

@@ -80,9 +77,8 @@ var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", feature.HonorPVRec
8077

8178
ginkgo.It("Dynamic provisioning should honor pv delete reclaim policy when deleting pv then pvc", func(ctx context.Context) {
8279
m.init(ctx, testParameters{
83-
registerDriver: true,
84-
enableHonorPVReclaimPolicy: true,
85-
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimDelete),
80+
registerDriver: true,
81+
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimDelete),
8682
})
8783
ginkgo.DeferCleanup(m.cleanup)
8884

@@ -119,9 +115,8 @@ var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", feature.HonorPVRec
119115

120116
ginkgo.It("Dynamic provisioning should honor pv retain reclaim policy when deleting pvc then pv", func(ctx context.Context) {
121117
m.init(ctx, testParameters{
122-
registerDriver: true,
123-
enableHonorPVReclaimPolicy: true,
124-
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimRetain),
118+
registerDriver: true,
119+
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimRetain),
125120
})
126121
ginkgo.DeferCleanup(m.cleanup)
127122

@@ -166,9 +161,8 @@ var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", feature.HonorPVRec
166161

167162
ginkgo.It("Dynamic provisioning should honor pv retain reclaim policy when deleting pv then pvc", func(ctx context.Context) {
168163
m.init(ctx, testParameters{
169-
registerDriver: true,
170-
enableHonorPVReclaimPolicy: true,
171-
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimRetain),
164+
registerDriver: true,
165+
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimRetain),
172166
})
173167
ginkgo.DeferCleanup(m.cleanup)
174168

@@ -207,9 +201,8 @@ var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", feature.HonorPVRec
207201

208202
ginkgo.It("Static provisioning should honor pv delete reclaim policy when deleting pvc", func(ctx context.Context) {
209203
m.init(ctx, testParameters{
210-
registerDriver: true,
211-
enableHonorPVReclaimPolicy: true,
212-
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimDelete),
204+
registerDriver: true,
205+
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimDelete),
213206
})
214207
ginkgo.DeferCleanup(m.cleanup)
215208

@@ -237,9 +230,8 @@ var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", feature.HonorPVRec
237230

238231
ginkgo.It("Static provisioning should honor pv delete reclaim policy when deleting pv then pvc", func(ctx context.Context) {
239232
m.init(ctx, testParameters{
240-
registerDriver: true,
241-
enableHonorPVReclaimPolicy: true,
242-
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimDelete),
233+
registerDriver: true,
234+
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimDelete),
243235
})
244236
ginkgo.DeferCleanup(m.cleanup)
245237

@@ -271,9 +263,8 @@ var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", feature.HonorPVRec
271263

272264
ginkgo.It("Static provisioning should honor pv retain reclaim policy when deleting pvc then pv", func(ctx context.Context) {
273265
m.init(ctx, testParameters{
274-
registerDriver: true,
275-
enableHonorPVReclaimPolicy: true,
276-
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimRetain),
266+
registerDriver: true,
267+
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimRetain),
277268
})
278269
ginkgo.DeferCleanup(m.cleanup)
279270

@@ -311,9 +302,8 @@ var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", feature.HonorPVRec
311302

312303
ginkgo.It("Static provisioning should honor pv retain reclaim policy when deleting pv then pvc", func(ctx context.Context) {
313304
m.init(ctx, testParameters{
314-
registerDriver: true,
315-
enableHonorPVReclaimPolicy: true,
316-
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimRetain),
305+
registerDriver: true,
306+
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimRetain),
317307
})
318308
ginkgo.DeferCleanup(m.cleanup)
319309

@@ -347,9 +337,8 @@ var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", feature.HonorPVRec
347337
ginkgo.Context("CSI honor pv reclaim policy changes using mock driver", func() {
348338
ginkgo.It("should honor pv reclaim policy after it is changed from retain to deleted", func(ctx context.Context) {
349339
m.init(ctx, testParameters{
350-
registerDriver: true,
351-
enableHonorPVReclaimPolicy: true,
352-
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimRetain),
340+
registerDriver: true,
341+
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimRetain),
353342
})
354343
ginkgo.DeferCleanup(m.cleanup)
355344

@@ -405,9 +394,8 @@ var _ = utils.SIGDescribe("CSI Mock honor pv reclaim policy", feature.HonorPVRec
405394

406395
ginkgo.It("should honor pv reclaim policy after it is changed from deleted to retain", func(ctx context.Context) {
407396
m.init(ctx, testParameters{
408-
registerDriver: true,
409-
enableHonorPVReclaimPolicy: true,
410-
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimDelete),
397+
registerDriver: true,
398+
reclaimPolicy: ptr.To(v1.PersistentVolumeReclaimDelete),
411399
})
412400
ginkgo.DeferCleanup(m.cleanup)
413401

test/e2e/storage/drivers/csi.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ import (
6262
"k8s.io/apimachinery/pkg/util/wait"
6363
clientset "k8s.io/client-go/kubernetes"
6464
"k8s.io/klog/v2"
65-
"k8s.io/kubernetes/pkg/features"
6665
"k8s.io/kubernetes/test/e2e/feature"
6766
"k8s.io/kubernetes/test/e2e/framework"
6867
e2enode "k8s.io/kubernetes/test/e2e/framework/node"
@@ -356,7 +355,6 @@ type mockCSIDriver struct {
356355
enableSELinuxMount *bool
357356
enableRecoverExpansionFailure bool
358357
disableControllerExpansion bool
359-
enableHonorPVReclaimPolicy bool
360358

361359
// Additional values set during PrepareTest
362360
clientSet clientset.Interface
@@ -407,7 +405,6 @@ type CSIMockDriverOpts struct {
407405
FSGroupPolicy *storagev1.FSGroupPolicy
408406
EnableSELinuxMount *bool
409407
EnableRecoverExpansionFailure bool
410-
EnableHonorPVReclaimPolicy bool
411408

412409
// Embedded defines whether the CSI mock driver runs
413410
// inside the cluster (false, the default) or just a proxy
@@ -564,7 +561,6 @@ func InitMockCSIDriver(driverOpts CSIMockDriverOpts) MockCSITestDriver {
564561
enableVolumeMountGroup: driverOpts.EnableVolumeMountGroup,
565562
enableSELinuxMount: driverOpts.EnableSELinuxMount,
566563
enableRecoverExpansionFailure: driverOpts.EnableRecoverExpansionFailure,
567-
enableHonorPVReclaimPolicy: driverOpts.EnableHonorPVReclaimPolicy,
568564
embedded: driverOpts.Embedded,
569565
hooks: driverOpts.Hooks,
570566
}
@@ -726,9 +722,6 @@ func (m *mockCSIDriver) PrepareTest(ctx context.Context, f *framework.Framework)
726722
if m.enableRecoverExpansionFailure {
727723
o.Features["csi-resizer"] = []string{"RecoverVolumeExpansionFailure=true"}
728724
}
729-
if m.enableHonorPVReclaimPolicy {
730-
o.Features["csi-provisioner"] = append(o.Features["csi-provisioner"], fmt.Sprintf("%s=true", features.HonorPVReclaimPolicy))
731-
}
732725

733726
err = utils.CreateFromManifests(ctx, f, m.driverNamespace, func(item interface{}) error {
734727
if err := utils.PatchCSIDeployment(config.Framework, o, item); err != nil {

test/featuregates_linter/test_data/versioned_feature_list.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,10 @@
500500
lockToDefault: false
501501
preRelease: Beta
502502
version: "1.31"
503+
- default: true
504+
lockToDefault: true
505+
preRelease: GA
506+
version: "1.33"
503507
- name: HPAScaleToZero
504508
versionedSpecs:
505509
- default: false

0 commit comments

Comments
 (0)