mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-21 09:57:52 +00:00
Use ScaleHandler for all scalable resources
This commit is contained in:
committed by
Andrea Nodari
parent
a9ea98b3b9
commit
816e80206c
@@ -26,6 +26,7 @@ import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"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"
|
||||
@@ -50,6 +51,11 @@ type ReplicaSetStorage struct {
|
||||
Scale *ScaleREST
|
||||
}
|
||||
|
||||
// maps a group version to the replicas path in a replicaset object
|
||||
var replicasPathInReplicaSet = fieldmanager.ResourcePathMappings{
|
||||
schema.GroupVersion{Group: "apps", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||
}
|
||||
|
||||
// NewStorage returns new instance of ReplicaSetStorage.
|
||||
func NewStorage(optsGetter generic.RESTOptionsGetter) (ReplicaSetStorage, error) {
|
||||
replicaSetRest, replicaSetStatusRest, err := NewREST(optsGetter)
|
||||
@@ -279,12 +285,24 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
||||
return nil, errors.NewNotFound(apps.Resource("replicasets/scale"), i.name)
|
||||
}
|
||||
|
||||
managedFieldsHandler := fieldmanager.NewScaleHandler(
|
||||
replicaset.ManagedFields,
|
||||
schema.GroupVersion{Group: "apps", Version: "v1"},
|
||||
replicasPathInReplicaSet,
|
||||
)
|
||||
|
||||
// replicaset -> old scale
|
||||
oldScale, err := scaleFromReplicaSet(replicaset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
scaleManagedFields, err := managedFieldsHandler.ToSubresource()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
oldScale.ManagedFields = scaleManagedFields
|
||||
|
||||
// old scale -> new scale
|
||||
newScaleObj, err := i.reqObjInfo.UpdatedObject(ctx, oldScale)
|
||||
if err != nil {
|
||||
@@ -315,5 +333,12 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
||||
// move replicas/resourceVersion fields to object and return
|
||||
replicaset.Spec.Replicas = scale.Spec.Replicas
|
||||
replicaset.ResourceVersion = scale.ResourceVersion
|
||||
|
||||
updatedEntries, err := managedFieldsHandler.ToParent(scale.ManagedFields)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
replicaset.ManagedFields = updatedEntries
|
||||
|
||||
return replicaset, nil
|
||||
}
|
||||
|
@@ -24,6 +24,7 @@ import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"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"
|
||||
@@ -47,6 +48,11 @@ type StatefulSetStorage struct {
|
||||
Scale *ScaleREST
|
||||
}
|
||||
|
||||
// maps a group version to the replicas path in a statefulset object
|
||||
var replicasPathInStatefulSet = fieldmanager.ResourcePathMappings{
|
||||
schema.GroupVersion{Group: "apps", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||
}
|
||||
|
||||
// NewStorage returns new instance of StatefulSetStorage.
|
||||
func NewStorage(optsGetter generic.RESTOptionsGetter) (StatefulSetStorage, error) {
|
||||
statefulSetRest, statefulSetStatusRest, err := NewREST(optsGetter)
|
||||
@@ -265,11 +271,22 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
||||
return nil, errors.NewNotFound(apps.Resource("statefulsets/scale"), i.name)
|
||||
}
|
||||
|
||||
managedFieldsHandler := fieldmanager.NewScaleHandler(
|
||||
statefulset.ManagedFields,
|
||||
schema.GroupVersion{Group: "apps", Version: "v1"},
|
||||
replicasPathInStatefulSet,
|
||||
)
|
||||
|
||||
// statefulset -> old scale
|
||||
oldScale, err := scaleFromStatefulSet(statefulset)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
scaleManagedFields, err := managedFieldsHandler.ToSubresource()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
oldScale.ManagedFields = scaleManagedFields
|
||||
|
||||
// old scale -> new scale
|
||||
newScaleObj, err := i.reqObjInfo.UpdatedObject(ctx, oldScale)
|
||||
@@ -301,5 +318,12 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
||||
// move replicas/resourceVersion fields to object and return
|
||||
statefulset.Spec.Replicas = scale.Spec.Replicas
|
||||
statefulset.ResourceVersion = scale.ResourceVersion
|
||||
|
||||
updatedEntries, err := managedFieldsHandler.ToParent(scale.ManagedFields)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
statefulset.ManagedFields = updatedEntries
|
||||
|
||||
return statefulset, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user