Source code for saltext.helm.states.helm

import logging

from salt.exceptions import CommandExecutionError

log = logging.getLogger(__name__)


[docs] def repo_managed( name, present=None, absent=None, prune=False, repo_update=False, namespace=None, flags=None, kvflags=None, ): """ Make sure the repository is updated. name (string) Not used. present (list) List of repository to be present. It's a list of dict: [{'name': 'local_name', 'url': 'repository_url'}] absent (list) List of local name repository to be absent. prune (boolean - default: False) If True, all repository already present but not in the present list would be removed. repo_update (boolean - default: False) If True, the Helm repository is updated after a repository add or remove. namespace (string) The namespace scope for this request. flags (list) Flags in argument of the command without values. ex: ['help', '--help'] kvflags (dict) Flags in argument of the command with values. ex: {'v': 2, '--v': 4} Example: .. code-block:: yaml helm_repository_is_managed: helm.repo_managed: - present: - name: local_name_1 url: repository_url - absent: - local_name_2 """ ret = { "name": name, "changes": {}, "result": True, "comment": "Helm repo is managed.", } if "helm.repo_manage" not in __salt__: ret["result"] = False ret["comment"] = "'helm.repo_manage' modules not available on this minion." elif "helm.repo_update" not in __salt__: ret["result"] = False ret["comment"] = "'helm.repo_update' modules not available on this minion." elif __opts__.get("test", False): ret["result"] = None ret["comment"] = "Helm repo would have been managed." else: try: result = __salt__["helm.repo_manage"]( present=present, absent=absent, prune=prune, namespace=namespace, flags=flags, kvflags=kvflags, ) if result["failed"]: ret["comment"] = "Failed to add or remove some repositories." ret["changes"] = result ret["result"] = False elif result["added"] or result["removed"]: if repo_update: result_repo_update = __salt__["helm.repo_update"]( namespace=namespace, flags=flags, kvflags=kvflags ) result.update({"repo_update": result_repo_update}) ret["comment"] = "Repositories were added or removed." ret["changes"] = result except CommandExecutionError as err: ret["result"] = False ret["comment"] = f"Failed to add some repositories: {err}." return ret
[docs] def repo_updated(name, namespace=None, flags=None, kvflags=None): """ Make sure the repository is updated. To execute after a repository changes. name (string) Not used. namespace (string) The namespace scope for this request. flags (list) Flags in argument of the command without values. ex: ['help', '--help'] kvflags (dict) Flags in argument of the command with values. ex: {'v': 2, '--v': 4} Example: .. code-block:: yaml helm_repository_is_updated: helm.repo_updated """ ret = { "name": name, "changes": {}, "result": True, "comment": "Helm repo is updated.", } if "helm.repo_update" not in __salt__: ret["result"] = False ret["comment"] = "'helm.repo_update' modules not available on this minion." elif __opts__.get("test", False): ret["result"] = None ret["comment"] = "Helm repo would have been updated." else: try: result = __salt__["helm.repo_update"](namespace=namespace, flags=flags, kvflags=kvflags) if not (isinstance(result, bool) and result): ret["result"] = False ret["changes"] = result ret["comment"] = "Failed to sync some repositories." except CommandExecutionError as err: ret["result"] = False ret["comment"] = f"Failed to update some repositories: {err}." return ret
[docs] def release_present( name, chart, values=None, version=None, namespace=None, set=None, flags=None, kvflags=None, ): """ Make sure the release name is present. name (string) The release name to install. chart (string) The chart to install. values (string) Absolute path to the values.yaml file. version (string) The exact chart version to install. If this is not specified, the latest version is installed. namespace (string) The namespace scope for this request. set (string or list) Set a values on the command line. flags (list) Flags in argument of the command without values. ex: ['help', '--help'] kvflags (dict) Flags in argument of the command with values. ex: {'v': 2, '--v': 4} Example: .. code-block:: yaml helm_release_is_present: helm.release_present: - name: release_name - chart: repo/chart # In dry-run mode. helm_release_is_present_dry-run: helm.release_present: - name: release_name - chart: repo/chart - flags: - dry-run # With values.yaml file. helm_release_is_present_values: helm.release_present: - name: release_name - chart: repo/chart - kvflags: values: /path/to/values.yaml """ ret = { "name": name, "changes": {}, "result": True, "comment": f"Helm release {name} is present", } if "helm.status" not in __salt__: ret["result"] = False ret["comment"] = "'helm.status' modules not available on this minion." elif "helm.install" not in __salt__: ret["result"] = False ret["comment"] = "'helm.install' modules not available on this minion." elif "helm.upgrade" not in __salt__: ret["result"] = False ret["comment"] = "'helm.upgrade' modules not available on this minion." elif __opts__.get("test", False): ret["result"] = None ret["comment"] = "Helm release would have been installed or updated." else: release_old_status = __salt__["helm.status"](release=name, namespace=namespace) if isinstance(release_old_status, dict): release_upgrade = __salt__["helm.upgrade"]( release=name, chart=chart, values=values, version=version, namespace=namespace, set=set, flags=flags, kvflags=kvflags, ) if isinstance(release_upgrade, bool) and release_upgrade: release_cur_status = __salt__["helm.status"](release=name, namespace=namespace) if isinstance(release_cur_status, dict): release_cur_status.pop("manifest") ret["changes"] = release_cur_status else: ret["result"] = False ret["comment"] = release_cur_status else: ret["result"] = False ret["comment"] = release_upgrade else: release_install = __salt__["helm.install"]( release=name, chart=chart, values=values, version=version, namespace=namespace, set=set, flags=flags, kvflags=kvflags, ) if isinstance(release_install, bool) and release_install: release_cur_status = __salt__["helm.status"](release=name, namespace=namespace) if isinstance(release_cur_status, dict): release_cur_status.pop("manifest") ret["changes"] = release_cur_status else: ret["result"] = False ret["comment"] = release_cur_status else: ret["result"] = False ret["comment"] = release_install return ret
[docs] def release_absent(name, namespace=None, flags=None, kvflags=None): """ Make sure the release name is absent. name (string) The release name to uninstall. namespace (string) The namespace scope for this request. flags (list) Flags in argument of the command without values. ex: ['help', '--help'] kvflags (dict) Flags in argument of the command with values. ex: {'v': 2, '--v': 4} Example: .. code-block:: yaml helm_release_is_absent: helm.release_absent: - name: release_name # In dry-run mode. helm_release_is_absent_dry-run: helm.release_absent: - name: release_name - flags: - dry-run """ ret = { "name": name, "changes": {}, "result": True, "comment": f"Helm release {name} is absent.", } if "helm.uninstall" not in __salt__: ret["result"] = False ret["comment"] = "'helm.uninstall' modules not available on this minion." elif "helm.status" not in __salt__: ret["result"] = False ret["comment"] = "'helm.status' modules not available on this minion." elif __opts__.get("test", False): ret["result"] = None ret["comment"] = "Helm release would have been uninstalled." else: release_status = __salt__["helm.status"](release=name, namespace=namespace) if isinstance(release_status, dict): release_uninstall = __salt__["helm.uninstall"]( release=name, namespace=namespace, flags=flags, kvflags=kvflags ) if isinstance(release_uninstall, bool) and release_uninstall: ret["changes"] = {"absent": name} else: ret["result"] = False ret["comment"] = release_uninstall return ret