diff --git a/changelogs/fragments/20240117-fix-helm-diff-cmd-line-rendering.yml b/changelogs/fragments/20240117-fix-helm-diff-cmd-line-rendering.yml new file mode 100644 index 00000000..14ed5579 --- /dev/null +++ b/changelogs/fragments/20240117-fix-helm-diff-cmd-line-rendering.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - align `helmdiff_check()` function commandline rendering with the `deploy()` function (https://github.com/ansible-collections/kubernetes.core/pull/670). + - integrations test helm_kubeconfig - set helm version to v3.10.3 to avoid incompatability with new bitnami charts (https://github.com/ansible-collections/kubernetes.core/pull/670). diff --git a/plugins/modules/helm.py b/plugins/modules/helm.py index 2a29d027..11f323c4 100644 --- a/plugins/modules/helm.py +++ b/plugins/modules/helm.py @@ -639,6 +639,7 @@ def helmdiff_check( replace=False, chart_repo_url=None, post_renderer=False, + set_value_args=None, ): """ Use helm diff to determine if a release would change by upgrading a chart. @@ -656,6 +657,10 @@ def helmdiff_check( if post_renderer: cmd += " --post-renderer=" + post_renderer + if values_files: + for value_file in values_files: + cmd += " --values=" + value_file + if release_values != {}: fd, path = tempfile.mkstemp(suffix=".yml") with open(path, "w") as yaml_file: @@ -663,9 +668,8 @@ def helmdiff_check( cmd += " -f=" + path module.add_cleanup_file(path) - if values_files: - for values_file in values_files: - cmd += " -f=" + values_file + if set_value_args: + cmd += " " + set_value_args rc, out, err = module.run_helm_command(cmd) return (len(out.strip()) > 0, out.strip()) @@ -847,11 +851,11 @@ def main(): "Please consider add dependencies block or disable dependency_update to remove this warning." ) - if release_status is None: # Not installed - set_value_args = None - if set_values: - set_value_args = module.get_helm_set_values_args(set_values) + set_value_args = None + if set_values: + set_value_args = module.get_helm_set_values_args(set_values) + if release_status is None: # Not installed helm_cmd = deploy( module, helm_cmd, @@ -896,6 +900,7 @@ def main(): replace, chart_repo_url, post_renderer, + set_value_args, ) if would_change and module._diff: opt_result["diff"] = {"prepared": prepared} @@ -909,10 +914,6 @@ def main(): ) if force or would_change: - set_value_args = None - if set_values: - set_value_args = module.get_helm_set_values_args(set_values) - helm_cmd = deploy( module, helm_cmd, diff --git a/tests/integration/targets/helm_diff/tasks/main.yml b/tests/integration/targets/helm_diff/tasks/main.yml index d54d0ba7..f7df4790 100644 --- a/tests/integration/targets/helm_diff/tasks/main.yml +++ b/tests/integration/targets/helm_diff/tasks/main.yml @@ -143,6 +143,8 @@ chart_ref: "{{ test_chart_ref }}" values: foo: gaz + values_files: + - "{{ test_chart_ref }}/values.yml" register: install - assert: @@ -157,6 +159,46 @@ chart_ref: "{{ test_chart_ref }}" values: foo: gaz + values_files: + - "{{ test_chart_ref }}/values.yml" + register: install + + - assert: + that: + - install is not changed + + - name: Upgrade with set_values + helm: + binary_path: "{{ helm_binary }}" + name: test-chart + namespace: "{{ helm_namespace }}" + chart_ref: "{{ test_chart_ref }}" + values: + foo: gaz + values_files: + - "{{ test_chart_ref }}/values.yml" + set_values: + - value: foo=qux + value_type: string + register: install + + - assert: + that: + - install is changed + + - name: Upgrade with set_values idempotency check + helm: + binary_path: "{{ helm_binary }}" + name: test-chart + namespace: "{{ helm_namespace }}" + chart_ref: "{{ test_chart_ref }}" + values: + foo: gaz + values_files: + - "{{ test_chart_ref }}/values.yml" + set_values: + - value: foo=qux + value_type: string register: install - assert: diff --git a/tests/integration/targets/helm_kubeconfig/tasks/main.yml b/tests/integration/targets/helm_kubeconfig/tasks/main.yml index 244f1bdf..dc64c117 100644 --- a/tests/integration/targets/helm_kubeconfig/tasks/main.yml +++ b/tests/integration/targets/helm_kubeconfig/tasks/main.yml @@ -1,6 +1,10 @@ --- - name: Test helm with in-memory kubeconfig include_tasks: "from_in_memory_kubeconfig.yml" + loop_control: + loop_var: test_helm_version + with_items: + - "v3.10.3" - name: Test helm with custom kubeconfig and validate_certs=false include_tasks: "from_kubeconfig_with_validate_certs.yml" @@ -8,12 +12,10 @@ loop_var: test_helm_version with_items: - "v3.10.3" - - "v3.8.2" - name: Test helm with custom kubeconfig and ca_cert include_tasks: "from_kubeconfig_with_cacert.yml" loop_control: loop_var: test_helm_version with_items: - - "v3.5.1" - - "v3.4.2" + - "v3.10.3"