diff --git a/pkg/action/install.go b/pkg/action/install.go index 8dc6d84a2..b0dafe0ed 100644 --- a/pkg/action/install.go +++ b/pkg/action/install.go @@ -431,11 +431,15 @@ func (i *Install) RunWithContext(ctx context.Context, ch ci.Charter, vals map[st kube.ClientCreateOptionDryRun(true), ) } else if len(resources) > 0 { + updateThreeWayMergeForUnstructured := i.TakeOwnership && !i.ServerSideApply _, err = i.cfg.KubeClient.Update( toBeAdopted, resources, + kube.ClientUpdateOptionForceReplace(i.ForceReplace), kube.ClientUpdateOptionServerSideApply(i.ServerSideApply, i.ForceConflicts), kube.ClientUpdateOptionDryRun(true), + kube.ClientUpdateOptionThreeWayMergeForUnstructured(updateThreeWayMergeForUnstructured), + kube.ClientUpdateOptionUpgradeClientSideFieldManager(true), ) } if err != nil { diff --git a/pkg/action/upgrade.go b/pkg/action/upgrade.go index ff8ff582a..bd94ca880 100644 --- a/pkg/action/upgrade.go +++ b/pkg/action/upgrade.go @@ -400,12 +400,14 @@ func (u *Upgrade) performUpgrade(ctx context.Context, originalRelease, upgradedR u.cfg.Logger().Debug("dry run for release", "name", upgradedRelease.Name) // For server-side dry-run, validate resources against the API server if u.DryRunStrategy == DryRunServer { + upgradeClientSideFieldManager := isReleaseApplyMethodClientSideApply(originalRelease.ApplyMethod) && serverSideApply _, err := u.cfg.KubeClient.Update( current, target, kube.ClientUpdateOptionForceReplace(u.ForceReplace), kube.ClientUpdateOptionServerSideApply(serverSideApply, u.ForceConflicts), kube.ClientUpdateOptionDryRun(true), + kube.ClientUpdateOptionUpgradeClientSideFieldManager(upgradeClientSideFieldManager), ) if err != nil { return upgradedRelease, err