mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	fix --record to not fail a successful patch
This commit is contained in:
		@@ -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")
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user