From d7f547b4c2d999baadbb3bc3632def88e1e22d2f Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Mon, 25 Jan 2016 11:57:34 -0500 Subject: [PATCH] Make label/annotate commands fall back to update on patch compute failure --- pkg/kubectl/cmd/annotate.go | 11 +++++++++-- pkg/kubectl/cmd/label.go | 10 ++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/pkg/kubectl/cmd/annotate.go b/pkg/kubectl/cmd/annotate.go index 95869a3d534..23ed867bb32 100644 --- a/pkg/kubectl/cmd/annotate.go +++ b/pkg/kubectl/cmd/annotate.go @@ -23,6 +23,7 @@ import ( "io" "strings" + "github.com/golang/glog" "github.com/spf13/cobra" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/kubectl" @@ -206,8 +207,9 @@ func (o AnnotateOptions) RunAnnotate() error { return err } patchBytes, err := strategicpatch.CreateTwoWayMergePatch(oldData, newData, obj) + createdPatch := err == nil if err != nil { - return err + glog.V(2).Infof("couldn't compute patch: %v", err) } mapping := info.ResourceMapping() @@ -217,7 +219,12 @@ func (o AnnotateOptions) RunAnnotate() error { } helper := resource.NewHelper(client, mapping) - outputObj, err := helper.Patch(namespace, name, api.StrategicMergePatchType, patchBytes) + var outputObj runtime.Object + if createdPatch { + outputObj, err = helper.Patch(namespace, name, api.StrategicMergePatchType, patchBytes) + } else { + outputObj, err = helper.Replace(namespace, name, false, obj) + } if err != nil { return err } diff --git a/pkg/kubectl/cmd/label.go b/pkg/kubectl/cmd/label.go index 23f7b605644..8069d003f6f 100644 --- a/pkg/kubectl/cmd/label.go +++ b/pkg/kubectl/cmd/label.go @@ -23,6 +23,7 @@ import ( "reflect" "strings" + "github.com/golang/glog" "github.com/spf13/cobra" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/kubectl" @@ -259,8 +260,9 @@ func RunLabel(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri dataChangeMsg = "labeled" } patchBytes, err := strategicpatch.CreateTwoWayMergePatch(oldData, newData, obj) + createdPatch := err == nil if err != nil { - return err + glog.V(2).Infof("couldn't compute patch: %v", err) } mapping := info.ResourceMapping() @@ -270,7 +272,11 @@ func RunLabel(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri } helper := resource.NewHelper(client, mapping) - outputObj, err = helper.Patch(namespace, name, api.StrategicMergePatchType, patchBytes) + if createdPatch { + outputObj, err = helper.Patch(namespace, name, api.StrategicMergePatchType, patchBytes) + } else { + outputObj, err = helper.Replace(namespace, name, false, obj) + } if err != nil { return err }