diff --git a/api/v2/helmrelease_types.go b/api/v2/helmrelease_types.go
index b10ae6277..64ad69ad2 100644
--- a/api/v2/helmrelease_types.go
+++ b/api/v2/helmrelease_types.go
@@ -435,6 +435,11 @@ type Install struct {
// +optional
Remediation *InstallRemediation `json:"remediation,omitempty"`
+ // DisableTakeOwnership disables taking ownership of existing resources
+ // during the Helm install action. Defaults to false.
+ // +optional
+ DisableTakeOwnership bool `json:"disableTakeOwnership,omitempty"`
+
// DisableWait disables the waiting for resources to be ready after a Helm
// install has been performed.
// +optional
@@ -613,6 +618,11 @@ type Upgrade struct {
// +optional
Remediation *UpgradeRemediation `json:"remediation,omitempty"`
+ // DisableTakeOwnership disables taking ownership of existing resources
+ // during the Helm upgrade action. Defaults to false.
+ // +optional
+ DisableTakeOwnership bool `json:"disableTakeOwnership,omitempty"`
+
// DisableWait disables the waiting for resources to be ready after a Helm
// upgrade has been performed.
// +optional
diff --git a/config/crd/bases/helm.toolkit.fluxcd.io_helmreleases.yaml b/config/crd/bases/helm.toolkit.fluxcd.io_helmreleases.yaml
index c15433935..ca5017090 100644
--- a/config/crd/bases/helm.toolkit.fluxcd.io_helmreleases.yaml
+++ b/config/crd/bases/helm.toolkit.fluxcd.io_helmreleases.yaml
@@ -370,6 +370,11 @@ spec:
DisableSchemaValidation prevents the Helm install action from validating
the values against the JSON Schema.
type: boolean
+ disableTakeOwnership:
+ description: |-
+ DisableTakeOwnership disables taking ownership of existing resources
+ during the Helm install action. Defaults to false.
+ type: boolean
disableWait:
description: |-
DisableWait disables the waiting for resources to be ready after a Helm
@@ -784,6 +789,11 @@ spec:
DisableSchemaValidation prevents the Helm upgrade action from validating
the values against the JSON Schema.
type: boolean
+ disableTakeOwnership:
+ description: |-
+ DisableTakeOwnership disables taking ownership of existing resources
+ during the Helm upgrade action. Defaults to false.
+ type: boolean
disableWait:
description: |-
DisableWait disables the waiting for resources to be ready after a Helm
diff --git a/docs/api/v2/helm.md b/docs/api/v2/helm.md
index 5ade58b64..8dc624706 100644
--- a/docs/api/v2/helm.md
+++ b/docs/api/v2/helm.md
@@ -1781,6 +1781,19 @@ action for the HelmRelease fails. The default is to not perform any action.
+disableTakeOwnership
+
+bool
+
+ |
+
+(Optional)
+ DisableTakeOwnership disables taking ownership of existing resources
+during the Helm install action. Defaults to false.
+ |
+
+
+
disableWait
bool
@@ -2682,6 +2695,19 @@ action for the HelmRelease fails. The default is to not perform any action.
|
+disableTakeOwnership
+
+bool
+
+ |
+
+(Optional)
+ DisableTakeOwnership disables taking ownership of existing resources
+during the Helm upgrade action. Defaults to false.
+ |
+
+
+
disableWait
bool
diff --git a/docs/spec/v2/helmreleases.md b/docs/spec/v2/helmreleases.md
index be974d766..387606abe 100644
--- a/docs/spec/v2/helmreleases.md
+++ b/docs/spec/v2/helmreleases.md
@@ -494,6 +494,8 @@ The field offers the following subfields:
rendered templates against the Kubernetes OpenAPI Schema. Defaults to `false`.
- `.disableSchemaValidation` (Optional): Prevents Helm from validating the
values against the JSON Schema. Defaults to `false`.
+- `.disableTakeOwnership` (Optional): Disables taking ownership of existing resources
+ during the Helm install action. Defaults to `false`.
- `.disableWait` (Optional): Disables waiting for resources to be ready after
the installation of the chart. Defaults to `false`.
- `.disableWaitForJobs` (Optional): Disables waiting for any Jobs to complete
@@ -538,6 +540,8 @@ The field offers the following subfields:
rendered templates against the Kubernetes OpenAPI Schema. Defaults to `false`.
- `.disableSchemaValidation` (Optional): Prevents Helm from validating the
values against the JSON Schema. Defaults to `false`.
+- `.disableTakeOwnership` (Optional): Disables taking ownership of existing resources
+ during the Helm upgrade action. Defaults to `false`.
- `.disableWait` (Optional): Disables waiting for resources to be ready after
upgrading the release. Defaults to `false`.
- `.disableWaitForJobs` (Optional): Disables waiting for any Jobs to complete
diff --git a/internal/action/install.go b/internal/action/install.go
index da093c688..826afc27e 100644
--- a/internal/action/install.go
+++ b/internal/action/install.go
@@ -68,6 +68,7 @@ func newInstall(config *helmaction.Configuration, obj *v2.HelmRelease, opts []In
install.ReleaseName = release.ShortenName(obj.GetReleaseName())
install.Namespace = obj.GetReleaseNamespace()
install.Timeout = obj.GetInstall().GetTimeout(obj.GetTimeout()).Duration
+ install.TakeOwnership = !obj.GetInstall().DisableTakeOwnership
install.Wait = !obj.GetInstall().DisableWait
install.WaitForJobs = !obj.GetInstall().DisableWaitForJobs
install.DisableHooks = obj.GetInstall().DisableHooks
@@ -76,7 +77,6 @@ func newInstall(config *helmaction.Configuration, obj *v2.HelmRelease, opts []In
install.Replace = obj.GetInstall().Replace
install.Devel = true
install.SkipCRDs = true
- install.TakeOwnership = true
if obj.Spec.TargetNamespace != "" {
install.CreateNamespace = obj.GetInstall().CreateNamespace
diff --git a/internal/action/install_test.go b/internal/action/install_test.go
index ea116c81c..5436b56dd 100644
--- a/internal/action/install_test.go
+++ b/internal/action/install_test.go
@@ -94,4 +94,24 @@ func Test_newInstall(t *testing.T) {
g.Expect(got.Atomic).To(BeTrue())
g.Expect(got.DryRun).To(BeTrue())
})
+
+ t.Run("disable take ownership", func(t *testing.T) {
+ g := NewWithT(t)
+
+ obj := &v2.HelmRelease{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "install",
+ Namespace: "install-ns",
+ },
+ Spec: v2.HelmReleaseSpec{
+ Install: &v2.Install{
+ DisableTakeOwnership: true,
+ },
+ },
+ }
+
+ got := newInstall(&helmaction.Configuration{}, obj, nil)
+ g.Expect(got).ToNot(BeNil())
+ g.Expect(got.TakeOwnership).To(BeFalse())
+ })
}
diff --git a/internal/action/upgrade.go b/internal/action/upgrade.go
index 079a1336a..94e14477b 100644
--- a/internal/action/upgrade.go
+++ b/internal/action/upgrade.go
@@ -69,6 +69,7 @@ func newUpgrade(config *helmaction.Configuration, obj *v2.HelmRelease, opts []Up
upgrade.ReuseValues = obj.GetUpgrade().PreserveValues
upgrade.MaxHistory = obj.GetMaxHistory()
upgrade.Timeout = obj.GetUpgrade().GetTimeout(obj.GetTimeout()).Duration
+ upgrade.TakeOwnership = !obj.GetUpgrade().DisableTakeOwnership
upgrade.Wait = !obj.GetUpgrade().DisableWait
upgrade.WaitForJobs = !obj.GetUpgrade().DisableWaitForJobs
upgrade.DisableHooks = obj.GetUpgrade().DisableHooks
@@ -77,7 +78,6 @@ func newUpgrade(config *helmaction.Configuration, obj *v2.HelmRelease, opts []Up
upgrade.Force = obj.GetUpgrade().Force
upgrade.CleanupOnFail = obj.GetUpgrade().CleanupOnFail
upgrade.Devel = true
- upgrade.TakeOwnership = true
// If the user opted-in to allow DNS lookups, enable it.
if allowDNS, _ := features.Enabled(features.AllowDNSLookups); allowDNS {
diff --git a/internal/action/upgrade_test.go b/internal/action/upgrade_test.go
index 7c2caa221..76462cd0a 100644
--- a/internal/action/upgrade_test.go
+++ b/internal/action/upgrade_test.go
@@ -94,4 +94,24 @@ func Test_newUpgrade(t *testing.T) {
g.Expect(got.Install).To(BeTrue())
g.Expect(got.DryRun).To(BeTrue())
})
+
+ t.Run("disable take ownership", func(t *testing.T) {
+ g := NewWithT(t)
+
+ obj := &v2.HelmRelease{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "upgrade",
+ Namespace: "upgrade-ns",
+ },
+ Spec: v2.HelmReleaseSpec{
+ Upgrade: &v2.Upgrade{
+ DisableTakeOwnership: true,
+ },
+ },
+ }
+
+ got := newUpgrade(&helmaction.Configuration{}, obj, nil)
+ g.Expect(got).ToNot(BeNil())
+ g.Expect(got.TakeOwnership).To(BeFalse())
+ })
}
|