Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add disableTakeOwnership to Helm install/upgrade actions #1140

Merged
merged 6 commits into from
Jan 10, 2025
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions api/v2/helmrelease_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,11 @@ type Install struct {
// +optional
Remediation *InstallRemediation `json:"remediation,omitempty"`

// DisableTakeOwnership disables ignoring the check for helm labels and annotations before taking
kumar-mallikarjuna marked this conversation as resolved.
Show resolved Hide resolved
// ownership of the 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
Expand Down Expand Up @@ -613,6 +618,11 @@ type Upgrade struct {
// +optional
Remediation *UpgradeRemediation `json:"remediation,omitempty"`

// DisableTakeOwnership disables ignoring the check for helm labels and annotations before taking
// ownership of the 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
Expand Down
10 changes: 10 additions & 0 deletions config/crd/bases/helm.toolkit.fluxcd.io_helmreleases.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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 ignoring the check for helm labels and annotations before taking
ownership of the 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
Expand Down Expand Up @@ -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 ignoring the check for helm labels and annotations before taking
ownership of the 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
Expand Down
26 changes: 26 additions & 0 deletions docs/api/v2/helm.md
Original file line number Diff line number Diff line change
Expand Up @@ -1781,6 +1781,19 @@ action for the HelmRelease fails. The default is to not perform any action.</p>
</tr>
<tr>
<td>
<code>disableTakeOwnership</code><br>
<em>
bool
</em>
</td>
<td>
<em>(Optional)</em>
<p>DisableTakeOwnership disables ignoring the check for helm labels and annotations before taking
ownership of the existing resources during the Helm install action. Defaults to false.</p>
</td>
</tr>
<tr>
<td>
<code>disableWait</code><br>
<em>
bool
Expand Down Expand Up @@ -2682,6 +2695,19 @@ action for the HelmRelease fails. The default is to not perform any action.</p>
</tr>
<tr>
<td>
<code>disableTakeOwnership</code><br>
<em>
bool
</em>
</td>
<td>
<em>(Optional)</em>
<p>DisableTakeOwnership disables ignoring the check for helm labels and annotations before taking
ownership of the existing resources during the Helm upgrade action. Defaults to false.</p>
</td>
</tr>
<tr>
<td>
<code>disableWait</code><br>
<em>
bool
Expand Down
4 changes: 4 additions & 0 deletions docs/spec/v2/helmreleases.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion internal/action/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
20 changes: 20 additions & 0 deletions internal/action/install_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
})
}
2 changes: 1 addition & 1 deletion internal/action/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 {
Expand Down
20 changes: 20 additions & 0 deletions internal/action/upgrade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
})
}