Reduce duplication between helpers for checking featuregate

This commit is contained in:
Hemant Kumar 2023-07-17 15:27:50 -04:00
parent 7edd72f780
commit 2e217e8cea
4 changed files with 33 additions and 38 deletions

View File

@ -22,6 +22,7 @@ import (
"k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/validation/field"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/core/helper"
"k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/features"
) )
@ -95,10 +96,10 @@ func EnforceDataSourceBackwardsCompatibility(pvcSpec, oldPVCSpec *core.Persisten
func DropDisabledFieldsFromStatus(pvc, oldPVC *core.PersistentVolumeClaim) { func DropDisabledFieldsFromStatus(pvc, oldPVC *core.PersistentVolumeClaim) {
if !utilfeature.DefaultFeatureGate.Enabled(features.RecoverVolumeExpansionFailure) { if !utilfeature.DefaultFeatureGate.Enabled(features.RecoverVolumeExpansionFailure) {
if !allocatedResourcesInUse(oldPVC) { if !helper.ClaimContainsAllocatedResources(oldPVC) {
pvc.Status.AllocatedResources = nil pvc.Status.AllocatedResources = nil
} }
if !resizeStatusInUse(oldPVC) { if !helper.ClaimContainsAllocatedResourceStatus(oldPVC) {
pvc.Status.AllocatedResourceStatuses = nil pvc.Status.AllocatedResourceStatuses = nil
} }
} }
@ -175,28 +176,6 @@ func NormalizeDataSources(pvcSpec *core.PersistentVolumeClaimSpec) {
} }
} }
func resizeStatusInUse(oldPVC *core.PersistentVolumeClaim) bool {
if oldPVC == nil {
return false
}
if oldPVC.Status.AllocatedResourceStatuses != nil {
return true
}
return false
}
func allocatedResourcesInUse(oldPVC *core.PersistentVolumeClaim) bool {
if oldPVC == nil {
return false
}
if oldPVC.Status.AllocatedResources != nil {
return true
}
return false
}
func GetWarningsForPersistentVolumeClaim(pv *core.PersistentVolumeClaim) []string { func GetWarningsForPersistentVolumeClaim(pv *core.PersistentVolumeClaim) []string {
var warnings []string var warnings []string

View File

@ -361,7 +361,22 @@ func ContainsAccessMode(modes []core.PersistentVolumeAccessMode, mode core.Persi
} }
func ClaimContainsAllocatedResources(pvc *core.PersistentVolumeClaim) bool { func ClaimContainsAllocatedResources(pvc *core.PersistentVolumeClaim) bool {
if pvc.Status.AllocatedResourceStatuses != nil || pvc.Status.AllocatedResources != nil { if pvc == nil {
return false
}
if pvc.Status.AllocatedResources != nil {
return true
}
return false
}
func ClaimContainsAllocatedResourceStatus(pvc *core.PersistentVolumeClaim) bool {
if pvc == nil {
return false
}
if pvc.Status.AllocatedResourceStatuses != nil {
return true return true
} }
return false return false

View File

@ -2047,7 +2047,8 @@ func ValidationOptionsForPersistentVolumeClaim(pvc, oldPvc *core.PersistentVolum
opts.AllowReadWriteOncePod = true opts.AllowReadWriteOncePod = true
} }
if helper.ClaimContainsAllocatedResources(oldPvc) { if helper.ClaimContainsAllocatedResources(oldPvc) ||
helper.ClaimContainsAllocatedResourceStatus(oldPvc) {
opts.EnableRecoverFromExpansionFailure = true opts.EnableRecoverFromExpansionFailure = true
} }
return opts return opts

View File

@ -159,16 +159,16 @@ func TestResizeFunctions(t *testing.T) {
{ {
name: "mark fs resize, with no other conditions", name: "mark fs resize, with no other conditions",
pvc: basePVC.get(), pvc: basePVC.get(),
expectedPVC: basePVC.modifyStorageResourceStatus(v1.PersistentVolumeClaimNodeResizePending).get(), expectedPVC: basePVC.withStorageResourceStatus(v1.PersistentVolumeClaimNodeResizePending).get(),
testFunc: func(pvc *v1.PersistentVolumeClaim, c clientset.Interface, _ resource.Quantity) (*v1.PersistentVolumeClaim, error) { testFunc: func(pvc *v1.PersistentVolumeClaim, c clientset.Interface, _ resource.Quantity) (*v1.PersistentVolumeClaim, error) {
return MarkForFSResize(pvc, c) return MarkForFSResize(pvc, c)
}, },
}, },
{ {
name: "mark fs resize, when other resource statuses are present", name: "mark fs resize, when other resource statuses are present",
pvc: basePVC.modifyResourceStatus(v1.ResourceCPU, v1.PersistentVolumeClaimControllerResizeFailed).get(), pvc: basePVC.withResourceStatus(v1.ResourceCPU, v1.PersistentVolumeClaimControllerResizeFailed).get(),
expectedPVC: basePVC.modifyResourceStatus(v1.ResourceCPU, v1.PersistentVolumeClaimControllerResizeFailed). expectedPVC: basePVC.withResourceStatus(v1.ResourceCPU, v1.PersistentVolumeClaimControllerResizeFailed).
modifyStorageResourceStatus(v1.PersistentVolumeClaimNodeResizePending).get(), withStorageResourceStatus(v1.PersistentVolumeClaimNodeResizePending).get(),
testFunc: func(pvc *v1.PersistentVolumeClaim, c clientset.Interface, _ resource.Quantity) (*v1.PersistentVolumeClaim, error) { testFunc: func(pvc *v1.PersistentVolumeClaim, c clientset.Interface, _ resource.Quantity) (*v1.PersistentVolumeClaim, error) {
return MarkForFSResize(pvc, c) return MarkForFSResize(pvc, c)
}, },
@ -176,17 +176,17 @@ func TestResizeFunctions(t *testing.T) {
{ {
name: "mark controller resize in-progress", name: "mark controller resize in-progress",
pvc: basePVC.get(), pvc: basePVC.get(),
expectedPVC: basePVC.modifyStorageResourceStatus(v1.PersistentVolumeClaimControllerResizeInProgress).get(), expectedPVC: basePVC.withStorageResourceStatus(v1.PersistentVolumeClaimControllerResizeInProgress).get(),
testFunc: func(pvc *v1.PersistentVolumeClaim, i clientset.Interface, q resource.Quantity) (*v1.PersistentVolumeClaim, error) { testFunc: func(pvc *v1.PersistentVolumeClaim, i clientset.Interface, q resource.Quantity) (*v1.PersistentVolumeClaim, error) {
return MarkControllerReisizeInProgress(pvc, "foobar", q, i) return MarkControllerReisizeInProgress(pvc, "foobar", q, i)
}, },
}, },
{ {
name: "mark resize finished", name: "mark resize finished",
pvc: basePVC.modifyResourceStatus(v1.ResourceCPU, v1.PersistentVolumeClaimControllerResizeFailed). pvc: basePVC.withResourceStatus(v1.ResourceCPU, v1.PersistentVolumeClaimControllerResizeFailed).
modifyStorageResourceStatus(v1.PersistentVolumeClaimNodeResizePending).get(), withStorageResourceStatus(v1.PersistentVolumeClaimNodeResizePending).get(),
expectedPVC: basePVC.modifyResourceStatus(v1.ResourceCPU, v1.PersistentVolumeClaimControllerResizeFailed). expectedPVC: basePVC.withResourceStatus(v1.ResourceCPU, v1.PersistentVolumeClaimControllerResizeFailed).
modifyStorageResourceStatus("").get(), withStorageResourceStatus("").get(),
testFunc: func(pvc *v1.PersistentVolumeClaim, i clientset.Interface, q resource.Quantity) (*v1.PersistentVolumeClaim, error) { testFunc: func(pvc *v1.PersistentVolumeClaim, i clientset.Interface, q resource.Quantity) (*v1.PersistentVolumeClaim, error) {
return MarkFSResizeFinished(pvc, q, i) return MarkFSResizeFinished(pvc, q, i)
}, },
@ -281,11 +281,11 @@ func makePVC(conditions []v1.PersistentVolumeClaimCondition) pvcModifier {
return pvcModifier{pvc} return pvcModifier{pvc}
} }
func (m pvcModifier) modifyStorageResourceStatus(status v1.ClaimResourceStatus) pvcModifier { func (m pvcModifier) withStorageResourceStatus(status v1.ClaimResourceStatus) pvcModifier {
return m.modifyResourceStatus(v1.ResourceStorage, status) return m.withResourceStatus(v1.ResourceStorage, status)
} }
func (m pvcModifier) modifyResourceStatus(resource v1.ResourceName, status v1.ClaimResourceStatus) pvcModifier { func (m pvcModifier) withResourceStatus(resource v1.ResourceName, status v1.ClaimResourceStatus) pvcModifier {
if m.pvc.Status.AllocatedResourceStatuses != nil && status == "" { if m.pvc.Status.AllocatedResourceStatuses != nil && status == "" {
delete(m.pvc.Status.AllocatedResourceStatuses, resource) delete(m.pvc.Status.AllocatedResourceStatuses, resource)
return m return m