From 85fe799b377d37f42607927487aede6c18014770 Mon Sep 17 00:00:00 2001 From: Robin Graillon Date: Fri, 25 Mar 2022 14:21:09 +0100 Subject: [PATCH] Add support for Helm charts from OCI registries (#834) * Add support for Helm charts from OCI registries * Add information about Helm charts on OCI registries in documentation --- docs/external_dependencies.md | 4 +++- kapitan/dependency_manager/base.py | 9 +++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/external_dependencies.md b/docs/external_dependencies.md index 56f271434..9bff5da4f 100644 --- a/docs/external_dependencies.md +++ b/docs/external_dependencies.md @@ -176,6 +176,8 @@ Fetches helm charts and any specific subcharts in the `requirements.yaml` file. It defaults to the value of the `KAPITAN_HELM_PATH` environment var or simply to `helm` if neither is set. You should specify only if you don't want the default behavior. +`source` can be either the URL to a chart repository, or the URL to a chart on an OCI registry (supported since Helm 3.8.0). + ### Usage ```yaml @@ -184,7 +186,7 @@ parameters: dependencies: - type: helm output_path: path/to/chart - source: http[s]:// + source: http[s]|oci:// version: chart_name: helm_path: diff --git a/kapitan/dependency_manager/base.py b/kapitan/dependency_manager/base.py index f1ad1f2c5..4a74d28c0 100644 --- a/kapitan/dependency_manager/base.py +++ b/kapitan/dependency_manager/base.py @@ -248,13 +248,18 @@ def fetch_helm_archive(helm_path, repo, chart_name, version, save_path): logger.info("Dependency helm chart %s and version %s: fetching now", chart_name, version or "latest") # Fetch archive and untar it into parent dir save_dir = os.path.dirname(save_path) - args = ["pull", "--destination", save_dir, "--untar", "--repo", repo] + args = ["pull", "--destination", save_dir, "--untar"] if version: args.append("--version") args.append(version) - args.append(chart_name) + if repo.startswith("oci://"): + args.append(repo) + else: + args.append("--repo") + args.append(repo) + args.append(chart_name) response = helm_cli(helm_path, args) if response != "":