mirror of
https://github.com/kubernetes/client-go.git
synced 2025-06-23 21:57:30 +00:00
Merge pull request #62306 from freehan/pod-status-patch2
Automatic merge from submit-queue (batch tested with PRs 58920, 58327, 60577, 49388, 62306). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Use Patch instead of Put to sync pod status ref: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md ```release-note Use Patch instead of Put to sync pod status ``` Kubernetes-commit: ea92879fab9eb9cd7a2529101fb088c2f07bd547
This commit is contained in:
commit
33a8186d0a
@ -25,6 +25,8 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/util/json"
|
||||||
|
"k8s.io/apimachinery/pkg/util/strategicpatch"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
)
|
)
|
||||||
@ -72,7 +74,6 @@ func ObjectReaction(tracker ObjectTracker) ReactionFunc {
|
|||||||
return func(action Action) (bool, runtime.Object, error) {
|
return func(action Action) (bool, runtime.Object, error) {
|
||||||
ns := action.GetNamespace()
|
ns := action.GetNamespace()
|
||||||
gvr := action.GetResource()
|
gvr := action.GetResource()
|
||||||
|
|
||||||
// Here and below we need to switch on implementation types,
|
// Here and below we need to switch on implementation types,
|
||||||
// not on interfaces, as some interfaces are identical
|
// not on interfaces, as some interfaces are identical
|
||||||
// (e.g. UpdateAction and CreateAction), so if we use them,
|
// (e.g. UpdateAction and CreateAction), so if we use them,
|
||||||
@ -125,6 +126,34 @@ func ObjectReaction(tracker ObjectTracker) ReactionFunc {
|
|||||||
}
|
}
|
||||||
return true, nil, nil
|
return true, nil, nil
|
||||||
|
|
||||||
|
case PatchActionImpl:
|
||||||
|
obj, err := tracker.Get(gvr, ns, action.GetName())
|
||||||
|
if err != nil {
|
||||||
|
// object is not registered
|
||||||
|
return false, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
old, err := json.Marshal(obj)
|
||||||
|
if err != nil {
|
||||||
|
return true, nil, err
|
||||||
|
}
|
||||||
|
// Only supports strategic merge patch
|
||||||
|
// TODO: Add support for other Patch types
|
||||||
|
mergedByte, err := strategicpatch.StrategicMergePatch(old, action.GetPatch(), obj)
|
||||||
|
if err != nil {
|
||||||
|
return true, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = json.Unmarshal(mergedByte, obj); err != nil {
|
||||||
|
return true, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = tracker.Update(gvr, obj, ns); err != nil {
|
||||||
|
return true, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, obj, nil
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false, nil, fmt.Errorf("no reaction implemented for %s", action)
|
return false, nil, fmt.Errorf("no reaction implemented for %s", action)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user