mirror of
https://github.com/outbackdingo/kubernetes.git
synced 2026-01-27 10:19:35 +00:00
Merge pull request #132662 from gnufied/bump-recovery-feature-ga
Bump recovery feature ga
This commit is contained in:
@@ -449,6 +449,7 @@ func TestDropDisabledVolumeAttributesClass(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDropDisabledFieldsFromStatus(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
tests := []struct {
|
||||
name string
|
||||
enableRecoverVolumeExpansionFailure bool
|
||||
|
||||
@@ -2333,6 +2333,7 @@ func TestAlphaPVVolumeModeUpdate(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestValidatePersistentVolumeClaimUpdate(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
block := core.PersistentVolumeBlock
|
||||
file := core.PersistentVolumeFilesystem
|
||||
invalidAPIGroup := "^invalid"
|
||||
@@ -20140,6 +20141,7 @@ func TestValidateLimitRange(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestValidatePersistentVolumeClaimStatusUpdate(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
validClaim := testVolumeClaim("foo", "ns", core.PersistentVolumeClaimSpec{
|
||||
AccessModes: []core.PersistentVolumeAccessMode{
|
||||
core.ReadWriteOnce,
|
||||
|
||||
@@ -1523,6 +1523,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
|
||||
RecoverVolumeExpansionFailure: {
|
||||
{Version: version.MustParse("1.23"), Default: false, PreRelease: featuregate.Alpha},
|
||||
{Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.Beta},
|
||||
{Version: version.MustParse("1.34"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // GA in 1.34; remove in 1.37
|
||||
},
|
||||
|
||||
RecursiveReadOnlyMounts: {
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apimachinery/pkg/util/version"
|
||||
"k8s.io/apiserver/pkg/admission"
|
||||
quota "k8s.io/apiserver/pkg/quota/v1"
|
||||
"k8s.io/apiserver/pkg/quota/v1/generic"
|
||||
@@ -159,6 +160,7 @@ func TestPersistentVolumeClaimEvaluatorMatchingScopes(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPersistentVolumeClaimEvaluatorUsage(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
classGold := "gold"
|
||||
validClaim := testVolumeClaim("foo", "ns", core.PersistentVolumeClaimSpec{
|
||||
Selector: &metav1.LabelSelector{
|
||||
|
||||
@@ -23,6 +23,7 @@ import (
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/apimachinery/pkg/util/version"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
@@ -45,6 +46,8 @@ func newFakeActualStateOfWorld() *fakeActualStateOfWorld {
|
||||
}
|
||||
|
||||
func TestNodeExpander(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
|
||||
nodeResizeFailed := v1.PersistentVolumeClaimNodeResizeInfeasible
|
||||
|
||||
nodeResizePending := v1.PersistentVolumeClaimNodeResizePending
|
||||
|
||||
@@ -34,6 +34,7 @@ import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/apimachinery/pkg/util/uuid"
|
||||
"k8s.io/apimachinery/pkg/util/version"
|
||||
fakeclient "k8s.io/client-go/kubernetes/fake"
|
||||
"k8s.io/component-base/metrics/testutil"
|
||||
"k8s.io/kubernetes/pkg/volume"
|
||||
@@ -93,6 +94,7 @@ func TestOperationGenerator_GenerateUnmapVolumeFunc_PluginName(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestOperationGenerator_GenerateExpandAndRecoverVolumeFunc(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
nodeResizePending := v1.PersistentVolumeClaimNodeResizePending
|
||||
nodeResizeFailed := v1.PersistentVolumeClaimNodeResizeInfeasible
|
||||
var tests = []struct {
|
||||
@@ -193,6 +195,7 @@ func TestOperationGenerator_nodeExpandVolume(t *testing.T) {
|
||||
x := resource.MustParse(size)
|
||||
return &x
|
||||
}
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
|
||||
nodeResizeFailed := v1.PersistentVolumeClaimNodeResizeInfeasible
|
||||
nodeResizePending := v1.PersistentVolumeClaimNodeResizePending
|
||||
@@ -321,6 +324,7 @@ func TestOperationGenerator_nodeExpandVolume(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestExpandDuringMount(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
nodeResizePending := v1.PersistentVolumeClaimNodeResizePending
|
||||
var tests = []struct {
|
||||
name string
|
||||
@@ -403,6 +407,7 @@ func TestExpandDuringMount(t *testing.T) {
|
||||
}
|
||||
}
|
||||
func TestCheckForRecoveryFromExpansion(t *testing.T) {
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
tests := []struct {
|
||||
name string
|
||||
pvc *v1.PersistentVolumeClaim
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/util/version"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/kubernetes/fake"
|
||||
@@ -174,7 +175,7 @@ func TestMergeResizeCondition(t *testing.T) {
|
||||
|
||||
func TestResizeFunctions(t *testing.T) {
|
||||
basePVC := makePVC([]v1.PersistentVolumeClaimCondition{})
|
||||
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
tests := []struct {
|
||||
name string
|
||||
pvc *v1.PersistentVolumeClaim
|
||||
|
||||
@@ -36,6 +36,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/apimachinery/pkg/util/version"
|
||||
"k8s.io/apiserver/pkg/admission"
|
||||
"k8s.io/apiserver/pkg/authentication/user"
|
||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||
@@ -1972,6 +1973,7 @@ func TestAdmitPVCStatus(t *testing.T) {
|
||||
mynode := &user.DefaultInfo{Name: "system:node:mynode", Groups: []string{"system:nodes"}}
|
||||
|
||||
nodeExpansionFailed := api.PersistentVolumeClaimNodeResizeInfeasible
|
||||
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, feature.DefaultFeatureGate, version.MustParse("1.33"))
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
|
||||
@@ -1199,6 +1199,10 @@
|
||||
lockToDefault: false
|
||||
preRelease: Beta
|
||||
version: "1.32"
|
||||
- default: true
|
||||
lockToDefault: true
|
||||
preRelease: GA
|
||||
version: "1.34"
|
||||
- name: RecursiveReadOnlyMounts
|
||||
versionedSpecs:
|
||||
- default: false
|
||||
|
||||
@@ -122,6 +122,13 @@ var _ = utils.SIGDescribe("PersistentVolumes-expansion", func() {
|
||||
gomega.Expect(pv).NotTo(gomega.BeNil())
|
||||
testVol.pv = pv
|
||||
|
||||
// since there is no external-resizer involved for this local volume,
|
||||
// we need to update the PVC status to reflect the new size.
|
||||
pvc, err := modifyPVCStatus(ctx, testVol.pvc, newSize, f.ClientSet)
|
||||
framework.ExpectNoError(err, "while updating pvc status to more size")
|
||||
gomega.Expect(pvc).NotTo(gomega.BeNil())
|
||||
testVol.pvc = pvc
|
||||
|
||||
ginkgo.By("Waiting for file system resize to finish")
|
||||
testVol.pvc, err = testsuites.WaitForFSResize(ctx, testVol.pvc, f.ClientSet)
|
||||
framework.ExpectNoError(err, "while waiting for fs resize to finish")
|
||||
@@ -134,6 +141,41 @@ var _ = utils.SIGDescribe("PersistentVolumes-expansion", func() {
|
||||
|
||||
})
|
||||
|
||||
func modifyPVCStatus(ctx context.Context, pvc *v1.PersistentVolumeClaim, size resource.Quantity, c clientset.Interface) (*v1.PersistentVolumeClaim, error) {
|
||||
pvcName := pvc.Name
|
||||
pvcToUpdate := pvc.DeepCopy()
|
||||
|
||||
var lastError error
|
||||
waitErr := wait.PollUntilContextTimeout(ctx, 5*time.Second, csiResizeWaitPeriod, true, func(ctx context.Context) (bool, error) {
|
||||
var err error
|
||||
pvcToUpdate, err = c.CoreV1().PersistentVolumeClaims(pvc.Namespace).Get(ctx, pvcName, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("error fetching pvc %s: %w", pvcName, err)
|
||||
}
|
||||
pvcToUpdate.Status.AllocatedResources = v1.ResourceList{
|
||||
v1.ResourceStorage: size,
|
||||
}
|
||||
pvcToUpdate.Status.AllocatedResourceStatuses = map[v1.ResourceName]v1.ClaimResourceStatus{
|
||||
v1.ResourceStorage: v1.PersistentVolumeClaimNodeResizePending,
|
||||
}
|
||||
|
||||
pvcToUpdate, err = c.CoreV1().PersistentVolumeClaims(pvc.Namespace).UpdateStatus(ctx, pvcToUpdate, metav1.UpdateOptions{})
|
||||
if err != nil {
|
||||
framework.Logf("error updating PVC %s: %v", pvcName, err)
|
||||
lastError = err
|
||||
return false, nil
|
||||
}
|
||||
return true, nil
|
||||
})
|
||||
if wait.Interrupted(waitErr) {
|
||||
return nil, fmt.Errorf("timed out attempting to update PVC size. last update error: %w", lastError)
|
||||
}
|
||||
if waitErr != nil {
|
||||
return nil, fmt.Errorf("failed to expand PVC size: %w", waitErr)
|
||||
}
|
||||
return pvcToUpdate, nil
|
||||
}
|
||||
|
||||
func UpdatePVSize(ctx context.Context, pv *v1.PersistentVolume, size resource.Quantity, c clientset.Interface) (*v1.PersistentVolume, error) {
|
||||
pvName := pv.Name
|
||||
pvToUpdate := pv.DeepCopy()
|
||||
|
||||
Reference in New Issue
Block a user