From aae5960dcee0c7640e10f485bc7cb5759bf19ac9 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Thu, 17 Feb 2022 12:12:43 +0530 Subject: [PATCH] helm_info: add release_state argument (#379) helm_info: add release_state argument SUMMARY Specify release state in helm list command as per helm cmdline flags. Fixes: #377 Signed-off-by: Abhijeet Kasurde akasurde@redhat.com ISSUE TYPE Bugfix Pull Request COMPONENT NAME changelogs/fragments/377-helm-info-state.yml molecule/default/roles/helm/tasks/tests_chart.yml plugins/modules/helm_info.py Reviewed-by: None Reviewed-by: Abhijeet Kasurde Reviewed-by: Mike Graves --- changelogs/fragments/377-helm-info-state.yml | 3 ++ .../default/roles/helm/tasks/tests_chart.yml | 10 ++++ plugins/modules/helm_info.py | 48 +++++++++++++++++-- 3 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 changelogs/fragments/377-helm-info-state.yml diff --git a/changelogs/fragments/377-helm-info-state.yml b/changelogs/fragments/377-helm-info-state.yml new file mode 100644 index 00000000..a7bb397b --- /dev/null +++ b/changelogs/fragments/377-helm-info-state.yml @@ -0,0 +1,3 @@ +--- +minor_changes: +- helm_info - add release state as a module argument (https://github.com/ansible-collections/kubernetes.core/issues/377). diff --git a/molecule/default/roles/helm/tasks/tests_chart.yml b/molecule/default/roles/helm/tasks/tests_chart.yml index 2199991c..9669f5de 100644 --- a/molecule/default/roles/helm/tasks/tests_chart.yml +++ b/molecule/default/roles/helm/tasks/tests_chart.yml @@ -80,11 +80,21 @@ namespace: "{{ helm_namespace }}" register: content_info + - name: Check helm_info content using release_state + helm_info: + binary_path: "{{ helm_binary }}" + name: test + namespace: "{{ helm_namespace }}" + release_state: + - deployed + register: release_state_content_info + - name: "Assert that {{ chart_test }} is installed from {{ source }} with helm_info" assert: that: - content_info.status.chart == "{{ chart_test }}-{{ chart_test_version }}" - content_info.status.status | lower == 'deployed' + - release_state_content_info.status.status | lower == 'deployed' - name: Check idempotency helm: diff --git a/plugins/modules/helm_info.py b/plugins/modules/helm_info.py index 47cc6b4a..b736a311 100644 --- a/plugins/modules/helm_info.py +++ b/plugins/modules/helm_info.py @@ -39,15 +39,36 @@ options: required: true type: str aliases: [ namespace ] + release_state: + description: + - Show releases as per their states. + - Default value is C(deployed) and C(failed). + - If set to C(all), show all releases without any filter applied. + - If set to C(deployed), show deployed releases. + - If set to C(failed), show failed releases. + - If set to C(pending), show pending releases. + - If set to C(superseded), show superseded releases. + - If set to C(uninstalled), show uninstalled releases, if C(helm uninstall --keep-history) was used. + - If set to C(uninstalling), show releases that are currently being uninstalled. + type: list + elements: str + version_added: "2.3.0" extends_documentation_fragment: - kubernetes.core.helm_common_options """ EXAMPLES = r""" -- name: Deploy latest version of Grafana chart inside monitoring namespace +- name: Gather information of Grafana chart inside monitoring namespace kubernetes.core.helm_info: name: test release_namespace: monitoring + +- name: Gather information about test-chart with pending state + kubernetes.core.helm_info: + name: test-chart + release_namespace: testenv + release_state: + - pending """ RETURN = r""" @@ -117,9 +138,24 @@ def get_release(state, release_name): # Get Release state from deployed release -def get_release_status(module, command, release_name): - list_command = command + " list --output=yaml --filter " + release_name +def get_release_status(module, command, release_name, release_state): + list_command = command + " list --output=yaml" + valid_release_states = [ + "all", + "deployed", + "failed", + "pending", + "superseded", + "uninstalled", + "uninstalling", + ] + + for local_release_state in release_state: + if local_release_state in valid_release_states: + list_command += " --%s" % local_release_state + + list_command += " --filter " + release_name rc, out, err = run_helm(module, list_command) if rc != 0: @@ -175,6 +211,7 @@ def main(): api_key=dict( type="str", no_log=True, fallback=(env_fallback, ["K8S_AUTH_API_KEY"]) ), + release_state=dict(type="list", default=[], elements="str"), ), mutually_exclusive=[ ("context", "ca_cert"), @@ -190,13 +227,16 @@ def main(): bin_path = module.params.get("binary_path") release_name = module.params.get("release_name") + release_state = module.params.get("release_state") if bin_path is not None: helm_cmd_common = bin_path else: helm_cmd_common = module.get_bin_path("helm", required=True) - release_status = get_release_status(module, helm_cmd_common, release_name) + release_status = get_release_status( + module, helm_cmd_common, release_name, release_state + ) if release_status is not None: module.exit_json(changed=False, status=release_status)