Use ScaleHandler for all scalable resources
This commit is contained in:

committed by
Andrea Nodari

parent
a9ea98b3b9
commit
816e80206c
@@ -27,6 +27,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
@@ -49,6 +50,11 @@ type ControllerStorage struct {
|
||||
Scale *ScaleREST
|
||||
}
|
||||
|
||||
// maps a group version to the replicas path in a deployment object
|
||||
var replicasPathInReplicationController = fieldmanager.ResourcePathMappings{
|
||||
schema.GroupVersion{Group: "", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||
}
|
||||
|
||||
func NewStorage(optsGetter generic.RESTOptionsGetter) (ControllerStorage, error) {
|
||||
controllerREST, statusREST, err := NewREST(optsGetter)
|
||||
if err != nil {
|
||||
@@ -239,8 +245,19 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
||||
return nil, errors.NewNotFound(api.Resource("replicationcontrollers/scale"), i.name)
|
||||
}
|
||||
|
||||
managedFieldsHandler := fieldmanager.NewScaleHandler(
|
||||
replicationcontroller.ManagedFields,
|
||||
schema.GroupVersion{Group: "", Version: "v1"},
|
||||
replicasPathInReplicationController,
|
||||
)
|
||||
|
||||
// replicationcontroller -> old scale
|
||||
oldScale := scaleFromRC(replicationcontroller)
|
||||
scaleManagedFields, err := managedFieldsHandler.ToSubresource()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
oldScale.ManagedFields = scaleManagedFields
|
||||
|
||||
// old scale -> new scale
|
||||
newScaleObj, err := i.reqObjInfo.UpdatedObject(ctx, oldScale)
|
||||
@@ -272,5 +289,12 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
||||
// move replicas/resourceVersion fields to object and return
|
||||
replicationcontroller.Spec.Replicas = scale.Spec.Replicas
|
||||
replicationcontroller.ResourceVersion = scale.ResourceVersion
|
||||
|
||||
updatedEntries, err := managedFieldsHandler.ToParent(scale.ManagedFields)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
replicationcontroller.ManagedFields = updatedEntries
|
||||
|
||||
return replicationcontroller, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user