mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
fix --record to not fail a successful patch
This commit is contained in:
parent
82c09f074b
commit
11da9a7638
@ -247,6 +247,7 @@ runTests() {
|
|||||||
secret_data=".data"
|
secret_data=".data"
|
||||||
secret_type=".type"
|
secret_type=".type"
|
||||||
deployment_image_field="(index .spec.template.spec.containers 0).image"
|
deployment_image_field="(index .spec.template.spec.containers 0).image"
|
||||||
|
change_cause_annotation='.*kubernetes.io/change-cause.*'
|
||||||
|
|
||||||
# Passing no arguments to create is an error
|
# Passing no arguments to create is an error
|
||||||
! kubectl create
|
! kubectl create
|
||||||
@ -458,9 +459,11 @@ runTests() {
|
|||||||
|
|
||||||
## Patch pod can change image
|
## Patch pod can change image
|
||||||
# Command
|
# Command
|
||||||
kubectl patch "${kube_flags[@]}" pod valid-pod -p='{"spec":{"containers":[{"name": "kubernetes-serve-hostname", "image": "nginx"}]}}'
|
kubectl patch "${kube_flags[@]}" pod valid-pod --record -p='{"spec":{"containers":[{"name": "kubernetes-serve-hostname", "image": "nginx"}]}}'
|
||||||
# Post-condition: valid-pod POD has image nginx
|
# Post-condition: valid-pod POD has image nginx
|
||||||
kube::test::get_object_assert pods "{{range.items}}{{$image_field}}:{{end}}" 'nginx:'
|
kube::test::get_object_assert pods "{{range.items}}{{$image_field}}:{{end}}" 'nginx:'
|
||||||
|
# Post-condition: valid-pod has the record annotation
|
||||||
|
kube::test::get_object_assert pods "{{range.items}}{{$annotations_field}}:{{end}}" "${change_cause_annotation}"
|
||||||
# prove that patch can use different types
|
# prove that patch can use different types
|
||||||
kubectl patch "${kube_flags[@]}" pod valid-pod --type="json" -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"nginx2"}]'
|
kubectl patch "${kube_flags[@]}" pod valid-pod --type="json" -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"nginx2"}]'
|
||||||
# Post-condition: valid-pod POD has image nginx
|
# Post-condition: valid-pod POD has image nginx
|
||||||
|
@ -139,18 +139,17 @@ func RunPatch(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
helper := resource.NewHelper(client, mapping)
|
helper := resource.NewHelper(client, mapping)
|
||||||
_, err = helper.Patch(namespace, name, patchType, patchBytes)
|
patchedObject, err := helper.Patch(namespace, name, patchType, patchBytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if cmdutil.ShouldRecord(cmd, info) {
|
if cmdutil.ShouldRecord(cmd, info) {
|
||||||
patchBytes, err = cmdutil.ChangeResourcePatch(info, f.Command())
|
if err := cmdutil.RecordChangeCause(patchedObject, f.Command()); err == nil {
|
||||||
if err != nil {
|
// don't return an error on failure. The patch itself succeeded, its only the hint for that change that failed
|
||||||
return err
|
// don't bother checking for failures of this replace, because a failure to indicate the hint doesn't fail the command
|
||||||
}
|
// also, don't force the replacement. If the replacement fails on a resourceVersion conflict, then it means this
|
||||||
_, err = helper.Patch(namespace, name, api.StrategicMergePatchType, patchBytes)
|
// record hint is likely to be invalid anyway, so avoid the bad hint
|
||||||
if err != nil {
|
resource.NewHelper(client, mapping).Replace(namespace, name, false, patchedObject)
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cmdutil.PrintSuccess(mapper, shortOutput, out, "", name, "patched")
|
cmdutil.PrintSuccess(mapper, shortOutput, out, "", name, "patched")
|
||||||
|
Loading…
Reference in New Issue
Block a user