Add support for take-ownership Helm flag (#957)

SUMMARY
Add support for take-ownership Helm flag added in Helm 3.17.0
ISSUE TYPE

Feature Pull Request

COMPONENT NAME

kubernetes.core.helm

Reviewed-by: Yuriy Novostavskiy
Reviewed-by: Rémy Jacquin
Reviewed-by: Bikouo Aubin
Reviewed-by: Bianca Henderson <beeankha@gmail.com>
This commit is contained in:
Rémy Jacquin
2025-07-28 17:18:46 +02:00
committed by GitHub
parent 1705ced1b5
commit cf3c3a9dcc
7 changed files with 131 additions and 1 deletions

View File

@@ -0,0 +1,2 @@
minor_changes:
- helm - Parameter take_ownership added (https://github.com/ansible-collections/kubernetes.core/pull/957).

View File

@@ -601,6 +601,27 @@ Parameters
<div>Skip custom resource definitions when installing or upgrading.</div> <div>Skip custom resource definitions when installing or upgrading.</div>
</td> </td>
</tr> </tr>
<tr>
<td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>take_ownership</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
<span style="color: purple">boolean</span>
</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 6.1.0</div>
</td>
<td>
<ul style="margin: 0; padding: 0"><b>Choices:</b>
<li><div style="color: blue"><b>no</b>&nbsp;&larr;</div></li>
<li>yes</li>
</ul>
</td>
<td>
<div>When upgrading, Helm will ignore the check for helm annotations and take ownership of the existing resources</div>
<div>This feature requires helm &gt;= 3.17.0</div>
</td>
</tr>
<tr> <tr>
<td colspan="2"> <td colspan="2">
<div class="ansibleOptionAnchor" id="parameter-"></div> <div class="ansibleOptionAnchor" id="parameter-"></div>
@@ -734,7 +755,7 @@ Parameters
</td> </td>
<td> <td>
<div>Use HTTP instead of HTTPS when working with OCI registries</div> <div>Use HTTP instead of HTTPS when working with OCI registries</div>
</td> </td>
</tr> </tr>
</table> </table>
<br/> <br/>

View File

@@ -244,6 +244,13 @@ options:
type: bool type: bool
default: False default: False
version_added: 6.1.0 version_added: 6.1.0
take_ownership:
description:
- When upgrading, Helm will ignore the check for helm annotations and take ownership of the existing resources
- This feature requires helm >= 3.17.0
type: bool
default: False
version_added: 6.1.0
extends_documentation_fragment: extends_documentation_fragment:
- kubernetes.core.helm_common_options - kubernetes.core.helm_common_options
""" """
@@ -560,6 +567,7 @@ def deploy(
reset_then_reuse_values=False, reset_then_reuse_values=False,
insecure_skip_tls_verify=False, insecure_skip_tls_verify=False,
plain_http=False, plain_http=False,
take_ownership=False,
): ):
""" """
Install/upgrade/rollback release chart Install/upgrade/rollback release chart
@@ -573,6 +581,8 @@ def deploy(
deploy_command = command + " upgrade -i" # install/upgrade deploy_command = command + " upgrade -i" # install/upgrade
if reset_values: if reset_values:
deploy_command += " --reset-values" deploy_command += " --reset-values"
if take_ownership:
deploy_command += " --take-ownership"
if reuse_values is not None: if reuse_values is not None:
deploy_command += " --reuse-values=" + str(reuse_values) deploy_command += " --reuse-values=" + str(reuse_values)
@@ -851,6 +861,7 @@ def argument_spec():
type="bool", default=False, aliases=["skip_tls_certs_check"] type="bool", default=False, aliases=["skip_tls_certs_check"]
), ),
plain_http=dict(type="bool", default=False), plain_http=dict(type="bool", default=False),
take_ownership=dict(type="bool", default=False),
) )
) )
return arg_spec return arg_spec
@@ -906,6 +917,7 @@ def main():
reset_then_reuse_values = module.params.get("reset_then_reuse_values") reset_then_reuse_values = module.params.get("reset_then_reuse_values")
insecure_skip_tls_verify = module.params.get("insecure_skip_tls_verify") insecure_skip_tls_verify = module.params.get("insecure_skip_tls_verify")
plain_http = module.params.get("plain_http") plain_http = module.params.get("plain_http")
take_ownership = module.params.get("take_ownership")
if update_repo_cache: if update_repo_cache:
run_repo_update(module) run_repo_update(module)
@@ -924,6 +936,14 @@ def main():
helm_version helm_version
) )
) )
if take_ownership:
helm_version = module.get_helm_version()
if LooseVersion(helm_version) < LooseVersion("3.17.0"):
module.fail_json(
msg="take_ownership requires helm >= 3.17.0, current version is {0}".format(
helm_version
)
)
opt_result = {} opt_result = {}
if release_state == "absent" and release_status is not None: if release_state == "absent" and release_status is not None:
@@ -1083,6 +1103,7 @@ def main():
reset_then_reuse_values=reset_then_reuse_values, reset_then_reuse_values=reset_then_reuse_values,
insecure_skip_tls_verify=insecure_skip_tls_verify, insecure_skip_tls_verify=insecure_skip_tls_verify,
plain_http=plain_http, plain_http=plain_http,
take_ownership=take_ownership,
) )
changed = True changed = True

View File

@@ -29,3 +29,4 @@ test_namespace:
- "helm-chart-with-space-into-name" - "helm-chart-with-space-into-name"
- "helm-reset-then-reuse-values" - "helm-reset-then-reuse-values"
- "helm-insecure" - "helm-insecure"
- "helm-test-take-ownership"

View File

@@ -6,3 +6,4 @@
with_items: with_items:
- "v3.15.4" - "v3.15.4"
- "v3.16.0" - "v3.16.0"
- "v3.17.0"

View File

@@ -47,6 +47,9 @@
- name: Test insecure registry flag feature - name: Test insecure registry flag feature
include_tasks: test_helm_insecure.yml include_tasks: test_helm_insecure.yml
- name: Test take ownership flag feature
include_tasks: test_helm_take_ownership.yml
- name: Clean helm install - name: Clean helm install
file: file:
path: "{{ item }}" path: "{{ item }}"

View File

@@ -0,0 +1,81 @@
---
- name: Test helm take ownership
vars:
helm_namespace: "{{ test_namespace[13] }}"
block:
- name: Initial chart installation (no flag set)
helm:
binary_path: "{{ helm_binary }}"
chart_ref: "{{ chart_test_oci }}"
release_name: test-take-ownership
release_namespace: "{{ helm_namespace }}"
create_namespace: true
register: install
- name: Validate that take-ownership flag is not set
assert:
that:
- install is changed
- '"--take-ownership" not in install.command'
- name: Upgrade chart (take-onwership flag set)
helm:
binary_path: "{{ helm_binary }}"
chart_ref: "{{ chart_test_oci }}"
release_name: test-take-ownership
release_namespace: "{{ helm_namespace }}"
take_ownership: true
values:
commonLabels:
take-onwership: "set"
register: upgrade
ignore_errors: true
- name: Validate that take-ownership flag IS set if helm version is >= 3.17.0
assert:
that:
- upgrade is changed
- '"--take-ownership" in upgrade.command'
when: '"v3.17.0" <= helm_version'
- name: Validate that feature fails for helm < 3.17.0
assert:
that:
- upgrade is failed
- '"take_ownership requires helm >= 3.17.0" in upgrade.msg'
when: 'helm_version < "v3.17.0"'
- name: Upgrade chart (take-onwership flag not set)
helm:
binary_path: "{{ helm_binary }}"
chart_ref: "{{ chart_test_oci }}"
release_name: test-take-ownership
release_namespace: "{{ helm_namespace }}"
values:
commonLabels:
take-onwership: "not-set"
register: upgrade
ignore_errors: true
- name: Validate that take-ownership flag IS set if helm version is >= 3.17.0
assert:
that:
- upgrade is changed
- '"--take-ownership" not in upgrade.command'
when: '"v3.17.0" <= helm_version'
- name: Validate that feature fails for helm < 3.17.0
assert:
that:
- upgrade is changed
- upgrade.msg is not defined
when: 'helm_version < "v3.17.0"'
always:
- name: Remove helm namespace
k8s:
api_version: v1
kind: Namespace
name: "{{ helm_namespace }}"
state: absent