Add volume limits API changes
This commit is contained in:
@@ -22,9 +22,11 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
"k8s.io/apiserver/pkg/storage/names"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
"k8s.io/kubernetes/pkg/apis/storage"
|
||||
"k8s.io/kubernetes/pkg/apis/storage/validation"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
)
|
||||
|
||||
// csiNodeStrategy implements behavior for CSINode objects
|
||||
@@ -41,8 +43,14 @@ func (csiNodeStrategy) NamespaceScoped() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// ResetBeforeCreate clears the Status field which is not allowed to be set by end users on creation.
|
||||
// PrepareForCreate clears fields that are not allowed to be set on creation.
|
||||
func (csiNodeStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) {
|
||||
csiNode := obj.(*storage.CSINode)
|
||||
if !utilfeature.DefaultFeatureGate.Enabled(features.AttachVolumeLimit) {
|
||||
for i := range csiNode.Spec.Drivers {
|
||||
csiNode.Spec.Drivers[i].Allocatable = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (csiNodeStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList {
|
||||
@@ -62,8 +70,33 @@ func (csiNodeStrategy) AllowCreateOnUpdate() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// PrepareForUpdate sets the Status fields which is not allowed to be set by an end user updating a CSINode
|
||||
// PrepareForUpdate sets the driver's Allocatable fields that are not allowed to be set by an end user updating a CSINode.
|
||||
func (csiNodeStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) {
|
||||
newCSINode := obj.(*storage.CSINode)
|
||||
oldCSINode := old.(*storage.CSINode)
|
||||
|
||||
inUse := getAllocatablesInUse(oldCSINode)
|
||||
|
||||
if !utilfeature.DefaultFeatureGate.Enabled(features.AttachVolumeLimit) {
|
||||
for i := range newCSINode.Spec.Drivers {
|
||||
if !inUse[newCSINode.Spec.Drivers[i].Name] {
|
||||
newCSINode.Spec.Drivers[i].Allocatable = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getAllocatablesInUse(obj *storage.CSINode) map[string]bool {
|
||||
inUse := make(map[string]bool)
|
||||
if obj == nil {
|
||||
return inUse
|
||||
}
|
||||
for i := range obj.Spec.Drivers {
|
||||
if obj.Spec.Drivers[i].Allocatable != nil {
|
||||
inUse[obj.Spec.Drivers[i].Name] = true
|
||||
}
|
||||
}
|
||||
return inUse
|
||||
}
|
||||
|
||||
func (csiNodeStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList {
|
||||
|
Reference in New Issue
Block a user