Make label/annotate commands fall back to update on patch compute failure

This commit is contained in:
Jordan Liggitt
2016-01-25 11:57:34 -05:00
parent 99f301d0b7
commit d7f547b4c2
2 changed files with 17 additions and 4 deletions

View File

@@ -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
}

View File

@@ -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
}