Skip to content

Commit 2dc581d

Browse files
committed
fix(upgrade): pass --server-side flag to install when using upgrade --install
When running `helm upgrade --install` on a non-existent release, the --server-side flag was not being passed to the install action. This caused the install to always use server-side apply (the default), ignoring --server-side=false. Copy ServerSideApply and ForceConflicts from the upgrade client to the install client when falling back to install. Fixes #31627 Signed-off-by: Evans Mungai <mbuevans@gmail.com>
1 parent 65f46d2 commit 2dc581d

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

pkg/cmd/upgrade.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ func newUpgradeCmd(cfg *action.Configuration, out io.Writer) *cobra.Command {
153153
instClient.EnableDNS = client.EnableDNS
154154
instClient.HideSecret = client.HideSecret
155155
instClient.TakeOwnership = client.TakeOwnership
156+
instClient.ForceConflicts = client.ForceConflicts
157+
instClient.ServerSideApply = client.ServerSideApply != "false"
156158

157159
if isReleaseUninstalled(versions) {
158160
instClient.Replace = true

pkg/cmd/upgrade_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,3 +605,58 @@ func TestUpgradeWithDryRun(t *testing.T) {
605605
t.Error("expected error when --hide-secret used without --dry-run")
606606
}
607607
}
608+
609+
func TestUpgradeInstallServerSideApply(t *testing.T) {
610+
_, _, chartPath := prepareMockRelease(t, "ssa-test")
611+
612+
defer resetEnv()()
613+
614+
tests := []struct {
615+
name string
616+
serverSideFlag string
617+
expectedApplyMethod string
618+
}{
619+
{
620+
name: "upgrade --install with --server-side=false uses client-side apply",
621+
serverSideFlag: "--server-side=false",
622+
expectedApplyMethod: "csa",
623+
},
624+
{
625+
name: "upgrade --install with --server-side=true uses server-side apply",
626+
serverSideFlag: "--server-side=true",
627+
expectedApplyMethod: "ssa",
628+
},
629+
{
630+
name: "upgrade --install with --server-side=auto uses server-side apply (default for new install)",
631+
serverSideFlag: "--server-side=auto",
632+
expectedApplyMethod: "ssa",
633+
},
634+
}
635+
636+
for _, tt := range tests {
637+
t.Run(tt.name, func(t *testing.T) {
638+
store := storageFixture()
639+
releaseName := fmt.Sprintf("ssa-test-%s", tt.expectedApplyMethod)
640+
641+
cmd := fmt.Sprintf("upgrade %s --install %s '%s'", releaseName, tt.serverSideFlag, chartPath)
642+
_, _, err := executeActionCommandC(store, cmd)
643+
if err != nil {
644+
t.Fatalf("unexpected error: %v", err)
645+
}
646+
647+
rel, err := store.Get(releaseName, 1)
648+
if err != nil {
649+
t.Fatalf("unexpected error getting release: %v", err)
650+
}
651+
652+
relV1, err := releaserToV1Release(rel)
653+
if err != nil {
654+
t.Fatalf("unexpected error converting release: %v", err)
655+
}
656+
657+
if relV1.ApplyMethod != tt.expectedApplyMethod {
658+
t.Errorf("expected ApplyMethod %q, got %q", tt.expectedApplyMethod, relV1.ApplyMethod)
659+
}
660+
})
661+
}
662+
}

0 commit comments

Comments
 (0)