Ensure diff doesn't persist patches

Kubernetes-commit: 9c0320f1bfd8edfb11c283b3fd422dc6e49360c5
This commit is contained in:
Julian V. Modesto 2020-04-02 17:14:17 -04:00 committed by Kubernetes Publisher
parent 7260b83dfa
commit 1cfa7c66b3
2 changed files with 9 additions and 16 deletions

View File

@ -80,16 +80,9 @@ func newPatcher(o *ApplyOptions, info *resource.Info) (*Patcher, error) {
openapiSchema = o.OpenAPISchema
}
helper := resource.NewHelper(info.Client, info.Mapping)
if o.DryRunStrategy == cmdutil.DryRunServer {
if err := o.DryRunVerifier.HasSupport(info.Mapping.GroupVersionKind); err != nil {
return nil, err
}
helper.DryRun(true)
}
return &Patcher{
Mapping: info.Mapping,
Helper: helper,
Helper: resource.NewHelper(info.Client, info.Mapping),
DynamicClient: o.DynamicClient,
Overwrite: o.Overwrite,
BackOff: clockwork.NewRealClock(),
@ -185,7 +178,7 @@ func (p *Patcher) patchSimple(obj runtime.Object, modified []byte, source, names
}
}
patchedObj, err := p.Helper.Patch(namespace, name, patchType, patch, nil)
patchedObj, err := p.Helper.DryRun(p.ServerDryRun).Patch(namespace, name, patchType, patch, nil)
return patch, patchedObj, err
}
@ -230,11 +223,11 @@ func (p *Patcher) deleteAndCreate(original runtime.Object, modified []byte, name
if err != nil {
return modified, nil, err
}
createdObject, err := p.Helper.Create(namespace, true, versionedObject)
createdObject, err := p.Helper.DryRun(p.ServerDryRun).Create(namespace, true, versionedObject)
if err != nil {
// restore the original object if we fail to create the new one
// but still propagate and advertise error to user
recreated, recreateErr := p.Helper.Create(namespace, true, original)
recreated, recreateErr := p.Helper.DryRun(p.ServerDryRun).Create(namespace, true, original)
if recreateErr != nil {
err = fmt.Errorf("An error occurred force-replacing the existing object with the newly provided one:\n\n%v.\n\nAdditionally, an error occurred attempting to restore the original object:\n\n%v", err, recreateErr)
} else {

View File

@ -312,6 +312,7 @@ func (obj InfoObject) Live() runtime.Object {
// Returns the "merged" object, as it would look like if applied or
// created.
func (obj InfoObject) Merged() (runtime.Object, error) {
helper := resource.NewHelper(obj.Info.Client, obj.Info.Mapping).DryRun(true)
if obj.ServerSideApply {
data, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj.LocalObj)
if err != nil {
@ -320,9 +321,8 @@ func (obj InfoObject) Merged() (runtime.Object, error) {
options := metav1.PatchOptions{
Force: &obj.ForceConflicts,
FieldManager: obj.FieldManager,
DryRun: []string{metav1.DryRunAll},
}
return resource.NewHelper(obj.Info.Client, obj.Info.Mapping).Patch(
return helper.Patch(
obj.Info.Namespace,
obj.Info.Name,
types.ApplyPatchType,
@ -334,11 +334,11 @@ func (obj InfoObject) Merged() (runtime.Object, error) {
// Build the patcher, and then apply the patch with dry-run, unless the object doesn't exist, in which case we need to create it.
if obj.Live() == nil {
// Dry-run create if the object doesn't exist.
return resource.NewHelper(obj.Info.Client, obj.Info.Mapping).CreateWithOptions(
return helper.CreateWithOptions(
obj.Info.Namespace,
true,
obj.LocalObj,
&metav1.CreateOptions{DryRun: []string{metav1.DryRunAll}},
&metav1.CreateOptions{},
)
}
@ -361,7 +361,7 @@ func (obj InfoObject) Merged() (runtime.Object, error) {
// We plan on replacing this with server-side apply when it becomes available.
patcher := &apply.Patcher{
Mapping: obj.Info.Mapping,
Helper: resource.NewHelper(obj.Info.Client, obj.Info.Mapping),
Helper: helper,
Overwrite: true,
BackOff: clockwork.NewRealClock(),
ServerDryRun: true,