From 2347d77f820f5d8d0b7df5d80cda9db68c453d4c Mon Sep 17 00:00:00 2001 From: zanejohnson-azure Date: Fri, 22 May 2026 22:29:30 -0700 Subject: [PATCH] fix(ci): pin --server-side=true alongside --force-conflicts for helm 4 upgrade PR #1667 added --force-conflicts to handle SSA field-ownership conflicts, but Helm 4's `helm upgrade --server-side` defaults to "auto", which resolves to false when the existing release's ApplyMethod is "client-side apply" (e.g., a release originally created by Helm 3 and never re-applied with SSA). With auto -> false and forceConflicts=true, Helm rejects the combination client-side before contacting the cluster: invalid client update option(s): forceConflicts enabled when serverSideApply disabled This is exactly what failed Stage_3 against Monitoring-Model-Cluster-WCUS / -WEU on 2026-05-22, while clusters whose last revision was already SSA succeeded. Fix: pass `--server-side=true` explicitly so SSA is engaged whenever --force-conflicts is set. The `=true` form (not bare `--server-side`) is required because: - `helm upgrade` defines --server-side as a StringVar ("true", "false", or "auto"); bare --server-side would consume the next token as the value. - `helm install` defines --server-side as a BoolVar. The explicit `=true` form is unambiguous for both subcommands. Side-effect on first run per cluster: Helm performs a field-manager handover from `kubectl-client-side-apply` to `helm` (SSA), which is why --force-conflicts is needed alongside. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .pipelines/helm-deploy-templates/ama-logs-helm-deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pipelines/helm-deploy-templates/ama-logs-helm-deploy.yaml b/.pipelines/helm-deploy-templates/ama-logs-helm-deploy.yaml index a1691a070..07f25c69f 100644 --- a/.pipelines/helm-deploy-templates/ama-logs-helm-deploy.yaml +++ b/.pipelines/helm-deploy-templates/ama-logs-helm-deploy.yaml @@ -121,5 +121,5 @@ jobs: ${{ else }}: overrideValues: 'global.commonGlobals.CloudEnvironment=${{ parameters.cloudEnvironment }},global.commonGlobals.Region=${{ parameters.region }},global.commonGlobals.Versions.Kubernetes=$(K8S_VERSION),OmsAgent.aksResourceID=$(AKS_RESOURCE_ID),OmsAgent.workspaceID=${{ parameters.workspaceId }},OmsAgent.imageRepository=${{ parameters.imageRepository }},OmsAgent.imageTagLinux=${{ parameters.amalogsLinuxImage }},OmsAgent.imageTagWindows=${{ parameters.amalogsWindowsImage }}' waitForExecution: false - arguments: '--timeout 10m --install --force-conflicts' + arguments: '--timeout 10m --install --server-side=true --force-conflicts'