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"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/core/helper"
"k8s.io/kubernetes/pkg/features"
)
@ -95,10 +96,10 @@ func EnforceDataSourceBackwardsCompatibility(pvcSpec, oldPVCSpec *core.Persisten
func DropDisabledFieldsFromStatus(pvc, oldPVC *core.PersistentVolumeClaim) {
if !utilfeature.DefaultFeatureGate.Enabled(features.RecoverVolumeExpansionFailure) {
if !allocatedResourcesInUse(oldPVC) {
if !helper.ClaimContainsAllocatedResources(oldPVC) {
pvc.Status.AllocatedResources = nil
}
if !resizeStatusInUse(oldPVC) {
if !helper.ClaimContainsAllocatedResourceStatus(oldPVC) {
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 {
var warnings []string

View File

@ -361,7 +361,22 @@ func ContainsAccessMode(modes []core.PersistentVolumeAccessMode, mode core.Persi
}
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 false

View File

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

View File

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