From 8ec38266ab435ae13d109e2f00dace91b79f6623 Mon Sep 17 00:00:00 2001 From: Mujib Ahasan Date: Sun, 1 Feb 2026 01:44:55 +0530 Subject: [PATCH 1/2] Check namespae before creating it Signed-off-by: Mujib Ahasan --- pkg/action/install.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pkg/action/install.go b/pkg/action/install.go index 0fe1f1a6e..b274ee102 100644 --- a/pkg/action/install.go +++ b/pkg/action/install.go @@ -427,11 +427,22 @@ func (i *Install) RunWithContext(ctx context.Context, ch ci.Charter, vals map[st return nil, err } - if _, err := i.cfg.KubeClient.Create( - resourceList, - kube.ClientCreateOptionServerSideApply(i.ServerSideApply, false)); err != nil && !apierrors.IsAlreadyExists(err) { + namespaceExist := false + _, err = i.cfg.KubeClient.Get(resourceList, false) + if err == nil { + namespaceExist = true + } else if !apierrors.IsNotFound(err) { return nil, err } + + if !namespaceExist { + if _, err := i.cfg.KubeClient.Create( + resourceList, + kube.ClientCreateOptionServerSideApply(i.ServerSideApply, false)); err != nil && !apierrors.IsAlreadyExists(err) { + return nil, err + } + } + } // If Replace is true, we need to supersede the last release. From 15886c3aa7e557b8e98a1c26c5b76b455e82c71d Mon Sep 17 00:00:00 2001 From: Mujib Ahasan Date: Tue, 3 Feb 2026 01:15:08 +0530 Subject: [PATCH 2/2] Test Cases Added Signed-off-by: Mujib Ahasan --- pkg/action/install_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/pkg/action/install_test.go b/pkg/action/install_test.go index 47080aef8..eb8f92b11 100644 --- a/pkg/action/install_test.go +++ b/pkg/action/install_test.go @@ -1208,3 +1208,41 @@ func TestInstallRelease_WaitOptionsPassedDownstream(t *testing.T) { // Verify that WaitOptions were passed to GetWaiter is.NotEmpty(failer.RecordedWaitOptions, "WaitOptions should be passed to GetWaiter") } + +func TestInstall_CreateNamespaceAlreadyExists(t *testing.T) { + is := assert.New(t) + + // Namespace already exists in cluster + config := actionConfigFixtureWithDummyResources(t, createDummyResourceList(true)) + + instAction := installActionWithConfig(config) + instAction.CreateNamespace = true + instAction.Namespace = "spaced" + + resi, err := instAction.Run(buildChart(), nil) + is.NoError(err) + + res, err := releaserToV1Release(resi) + is.NoError(err) + is.Equal("spaced", res.Namespace) + is.Equal("Install complete", res.Info.Description) +} + +func TestInstall_CreateNamespaceNotExists(t *testing.T) { + is := assert.New(t) + + // Empty cluster state, thats mean namespace not present + config := actionConfigFixture(t) + + instAction := installActionWithConfig(config) + instAction.CreateNamespace = true + instAction.Namespace = "spaced" + + resi, err := instAction.Run(buildChart(), nil) + is.NoError(err) + + res, err := releaserToV1Release(resi) + is.NoError(err) + is.Equal("spaced", res.Namespace) + is.Equal("Install complete", res.Info.Description) +}