From 43712332db6f287062e43ba1e0a92fec6caee41b Mon Sep 17 00:00:00 2001 From: Matteo Voges <98756476+MatteoVoges@users.noreply.github.com> Date: Fri, 28 Apr 2023 11:02:36 +0200 Subject: [PATCH 1/4] fix(tests): remove merge annotations from #993 (#994) * fix(tests): remove merge annotations from #993 * docs(inventory): fix path to introduction --- kapitan/inputs/kadet.py | 12 ------------ mkdocs.yml | 2 +- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/kapitan/inputs/kadet.py b/kapitan/inputs/kadet.py index ebd1c97c0..73a80d167 100644 --- a/kapitan/inputs/kadet.py +++ b/kapitan/inputs/kadet.py @@ -92,21 +92,13 @@ def compile_file(self, file_path, compile_path, ext_vars, **kwargs): ext_vars is not used in Kadet kwargs: output: default 'yaml', accepts 'json' -<<<<<<< HEAD - prune_output: default False -======= prune_input: default False ->>>>>>> dcd110c (Fix typo in kadet prune input handling) reveal: default False, set to reveal refs on compile target_name: default None, set to current target being compiled indent: default 2 """ output = kwargs.get("output", "yaml") -<<<<<<< HEAD - prune_output = kwargs.get("prune_output", False) -======= prune_input = kwargs.get("prune_input", False) ->>>>>>> dcd110c (Fix typo in kadet prune input handling) reveal = kwargs.get("reveal", False) target_name = kwargs.get("target_name", None) # inventory_path = kwargs.get("inventory_path", None) @@ -143,11 +135,7 @@ def compile_file(self, file_path, compile_path, ext_vars, **kwargs): raise CompileError(f"Could not load Kadet module: {spec.name[16:]}") output_obj = _to_dict(output_obj) -<<<<<<< HEAD - if prune_output: -======= if prune_input: ->>>>>>> dcd110c (Fix typo in kadet prune input handling) output_obj = prune_empty(output_obj) # Return None if output_obj has no output diff --git a/mkdocs.yml b/mkdocs.yml index 220547733..0019fa242 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -87,7 +87,7 @@ nav: - Documentation: - Overview: pages/kapitan_overview.md - Inventory: - - Introduction: /inventory/introduction.md + - Introduction: pages/inventory/introduction.md - Targets: pages/inventory/targets.md - Classes: pages/inventory/classes.md - Parameters Interpolation: pages/inventory/parameters_interpolation.md From 2cf625da1028edec423f17c23b74420bcd6b8b7f Mon Sep 17 00:00:00 2001 From: Alessandro De Maria Date: Mon, 1 May 2023 11:27:59 +0000 Subject: [PATCH 2/4] Fix bug in prune not being passed to inputs --- kapitan/inputs/jsonnet.py | 6 +++--- kapitan/inputs/kadet.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/kapitan/inputs/jsonnet.py b/kapitan/inputs/jsonnet.py index f6bdd8d98..cc101ef15 100644 --- a/kapitan/inputs/jsonnet.py +++ b/kapitan/inputs/jsonnet.py @@ -70,7 +70,7 @@ def compile_file(self, file_path, compile_path, ext_vars, **kwargs): ext_vars will be passed as parameters to jsonnet_file() kwargs: output: default 'yaml', accepts 'json' - prune: default False, accepts True + prune_output: default False, accepts True reveal: default False, set to reveal refs on compile target_name: default None, set to current target being compiled indent: default 2 @@ -97,12 +97,12 @@ def _search_imports(cwd, imp): output_obj = json.loads(json_output) output = kwargs.get("output", "yaml") - prune = kwargs.get("prune_output", False) + prune_output = kwargs.get("prune_output", False) reveal = kwargs.get("reveal", False) target_name = kwargs.get("target_name", None) indent = kwargs.get("indent", 2) - if prune: + if prune_output: output_obj = prune_empty(output_obj) logger.debug("Pruned output for: %s", file_path) diff --git a/kapitan/inputs/kadet.py b/kapitan/inputs/kadet.py index 73a80d167..f9b556434 100644 --- a/kapitan/inputs/kadet.py +++ b/kapitan/inputs/kadet.py @@ -92,13 +92,13 @@ def compile_file(self, file_path, compile_path, ext_vars, **kwargs): ext_vars is not used in Kadet kwargs: output: default 'yaml', accepts 'json' - prune_input: default False + prune_output: default False reveal: default False, set to reveal refs on compile target_name: default None, set to current target being compiled indent: default 2 """ output = kwargs.get("output", "yaml") - prune_input = kwargs.get("prune_input", False) + prune_output = kwargs.get("prune_output", False) reveal = kwargs.get("reveal", False) target_name = kwargs.get("target_name", None) # inventory_path = kwargs.get("inventory_path", None) @@ -135,7 +135,7 @@ def compile_file(self, file_path, compile_path, ext_vars, **kwargs): raise CompileError(f"Could not load Kadet module: {spec.name[16:]}") output_obj = _to_dict(output_obj) - if prune_input: + if prune_output: output_obj = prune_empty(output_obj) # Return None if output_obj has no output From be98682bdbacb5e131b128ab353d214b27735684 Mon Sep 17 00:00:00 2001 From: Alessandro De Maria Date: Thu, 9 Mar 2023 09:17:10 +0000 Subject: [PATCH 3/4] Improve remote fetch --- docs/pages/external_dependencies.md | 451 +++++++++++----------------- kapitan/dependency_manager/base.py | 34 ++- kapitan/reclass | 2 +- kapitan/remoteinventory/fetch.py | 2 +- kapitan/utils.py | 7 +- 5 files changed, 205 insertions(+), 291 deletions(-) diff --git a/docs/pages/external_dependencies.md b/docs/pages/external_dependencies.md index 06ba9d4b7..14e5787f9 100644 --- a/docs/pages/external_dependencies.md +++ b/docs/pages/external_dependencies.md @@ -1,303 +1,212 @@ # :kapitan-logo: External dependencies -Kapitan is capable of fetching components stored in remote locations. This feature can be used by specifying those dependencies in the inventory under `parameters.kapitan.dependencies`. Supported types are: +**Kapitan** has the functionality to fetch external dependencies from remote locations. -- [git type](#git-type) -- [http type](#http-type) -- [helm type](#helm-type) +Supported dependencies types are: -Some use cases of this feature may include: +- [git](#git) +- [http](#http) +- [helm](#helm) -- using templates/jsonnet libraries hosted remotely -- using values in remote files via `file_read` jsonnet callback ## Usage -```yaml -parameters: - kapitan: - dependencies: - - type: - output_path: path/to/file/or/dir - source: - # other type-specific parameters, if any -``` - -Use `--fetch` option to fetch the dependencies: - -```shell -kapitan compile --fetch -``` - -This will download the dependencies and store them at their respective `output_path`. -By default, kapitan does not overwrite existing items with the same name as that of the fetched dependencies. - -Use the `--force-fetch` flag to force fetch (update cache with freshly fetched dependencies) and overwrite any existing item sharing the same name in the `output_path`. - - -```shell -kapitan compile --force-fetch -``` - -Use the `--cache` flag to cache the fetched items in the `.dependency_cache` directory in the root project directory. - -```shell -kapitan compile --cache --fetch -``` - -## Git type - -Git types can fetch external dependencies available via HTTP/HTTPS or SSH URLs. This is useful for fetching repositories or their sub-directories, as well as accessing them in specific commits and branches (refs). - -**Note**: git types require git binary on your system. - -### Usage - -```yaml -parameters: - kapitan: - dependencies: - - type: git - output_path: path/to/dir - source: git_url - subdir: relative/path/from/repo/root (optional) - ref: tag, commit, branch etc. (optional) -``` - -### Example - -Say we want to fetch the source code from our kapitan repository, specifically, `kapicorp/kapitan/kapitan/version.py`. Let's create a very simple target file `inventory/targets/kapitan-example.yml`. - -```yaml -parameters: - kapitan: - vars: - target: kapitan-example - dependencies: - - type: git - output_path: source/kapitan - source: git@github.com:kapicorp/kapitan.git - subdir: kapitan - ref: master - compile: - - input_paths: - - source/kapitan/version.py - input_type: jinja2 # just to copy the file over to target - output_path: . -``` +*Kapitan* by default will not attempt to download any dependency, and rely on what is already available. -Then run: - -```shell -$ kapitan compile --fetch -t kapitan-example -Dependency git@github.com:kapicorp/kapitan.git : fetching now -Dependency git@github.com:kapicorp/kapitan.git : successfully fetched -Dependency git@github.com:kapicorp/kapitan.git : saved to source/kapitan -Compiled kapitan-example (0.02s) - -$ ls source -kapitan -``` +### Basic fetching -This will download the kapitan repository (kapicorp/kapitan), copy the sub-directory `kapitan` and save it to `source/kapitan`. Therefore, `kapicorp/kapitan/kapitan` corresponds to `source/kapitan` locally. +You can use the `fetch` option to explicitly fetch the dependencies: -Note that even if you are not using `subdir` parameter, you can and should specify the repository name in the `output_path` parameter. If you only specify `source` as the `output_path`, then all the kapitan files will be under `source` and not `source/kapitan`. +=== "cli" -## HTTP type + ```shell + kapitan compile --fetch + ``` -http[s] types can fetch external dependencies available at `http://` or `https://` URL. +=== "dotfile" -### Usage - -```yaml -parameters: - kapitan: - dependencies: - - type: http | https - output_path: path/to/file - source: http[s]:// - unpack: True | False -``` - -`output_path` must fully specify the file name. For example: - -```yaml -parameters: - kapitan: - dependencies: - - type: https - output_path: foo.txt - source: https://example.com/foo.txt -``` + !!! code "`.kapitan`" + to make it default, then simply use `kapitan compile` -### Example - -Say we want to download kapitan README.md file. Since it's on Github, we can access it as . Using the following inventory, we can copy this to our target folder: - -```yaml -parameters: - kapitan: - vars: - target: kapitan-example - dependencies: - - type: https - output_path: README.md - source: https://raw.githubusercontent.com/kapicorp/kapitan/master/README.md - compile: - - input_paths: - - README.md - input_type: jinja2 - output_path: . -``` + ```yaml + ... + compile: + fetch: true + ``` -Then run: + +This will download the dependencies and store them at their respective `output_path`. -```shell -$ kapitan compile --fetch -t kapitan-example -Dependency https://raw.githubusercontent.com/kapicorp/kapitan/master/README.md : fetching now -Dependency https://raw.githubusercontent.com/kapicorp/kapitan/master/README.md : successfully fetched -Dependency https://raw.githubusercontent.com/kapicorp/kapitan/master/README.md : saved to README.md -Compiled kapitan-example (0.02s) - -$ ls -compiled inventory README.md -``` +### Overwrite local changes -This fetches the README.md file from the URL and save it locally. +When fetching a dependency, **Kapitan** will refuse to overwrite existing files to preserve your local modifications. -Another use case for http types is when we want to download an archive file, such as helm packages, and extract its content. -Setting `unpack: True` will unpack zip or tar files onto the `output_path`. In such cases, set `output_path` to a folder where you extract the content, and not the file name. You can refer to [here](/pages/input_types/helm.md) for the example. +Use the `force-fetch` option to force overwrite your local files in the `output_path`. -## Helm type -Fetches helm charts and any specific subcharts in the `requirements.yaml` file. +=== "cli" -`helm_path` can be used to specify where the `helm` binary name or path. -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. + ```shell + kapitan compile --force-fetch + ``` -`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). +=== "dotfile" -### Usage + !!! code "`.kapitan`" + to make it default, then simply use `kapitan compile` -```yaml -parameters: - kapitan: - dependencies: - - type: helm - output_path: path/to/chart - source: http[s]|oci:// - version: - chart_name: - helm_path: -``` + ```yaml + ... + compile: + force-fetch: true + ``` -### Example - -If we want to download the prometheus helm chart we simply add the dependency to the monitoring target. -We want a specific version `11.3.0` so we put that in. - -```yaml -parameters: - kapitan: - vars: - target: monitoring - dependencies: - - type: helm - output_path: charts/prometheus - source: https://kubernetes-charts.storage.googleapis.com - version: 11.3.0 - chart_name: prometheus - compile: - - input_type: helm - output_path: . - input_paths: - - charts/prometheus - helm_values: - alertmanager: - enabled: false - helm_params: - namespace: monitoring - name: prometheus -``` +### Caching -Then run: +Kapitan also supports caching Use the `--cache` flag to cache the fetched items in the `.dependency_cache` directory in the root project directory. ```shell -$ kapitan compile --fetch -t monitoring -Dependency helm chart prometheus and version 11.3.0: fetching now -Dependency helm chart prometheus and version 11.3.0: successfully fetched -Dependency helm chart prometheus and version 11.3.0: saved to charts/prometheus -Compiled monitoring (1.48s) - -$ tree -L 3 -├── charts -│ └── prometheus -│ ├── Chart.yaml -│ ├── README.md -│ ├── charts -│ ├── requirements.lock -│ ├── requirements.yaml -│ ├── templates -│ └── values.yaml -├── compiled -│ ├── monitoring -├── inventory - ├── classes - ├── common.yml - ├── component -``` - -If you simply want the latest chart available, either don't include the `version` key or specify an empty string. - -```yaml -parameters: - kapitan: - vars: - target: monitoring - dependencies: - - type: helm - output_path: charts/prometheus - source: https://kubernetes-charts.storage.googleapis.com - version: "" - chart_name: prometheus - compile: - - input_type: helm - output_path: . - input_paths: - - charts/prometheus - helm_values: - alertmanager: - enabled: false - helm_params: - namespace: monitoring - name: prometheus +kapitan compile --cache --fetch ``` -Then run: +=== "git" + + ### Syntax + + ```yaml + parameters: + kapitan: + dependencies: + - type: git + output_path: path/to/dir + source: git_url # mkdocs (1)! + subdir: relative/path/from/repo/root (optional) # mkdocs (2)! + ref: tag, commit, branch etc. (optional) # mkdocs (3)! + ``` + + 1. Git types can fetch external `git` repositories through either HTTP/HTTPS or SSH URLs. + 2. Optional supports for cloning just a sub-directory + 3. Optional support for accessing them in specific commits and branches (refs). + + !!! note + + This type depends on the `git` binary installed on your system and available to **Kapitan**. + + ### Example + + Say we want to fetch the source code from our kapitan repository, specifically, `kapicorp/kapitan/kapitan/version.py`. Let's create a very simple target file `inventory/targets/kapitan-example.yml`. + + ```yaml + parameters: + kapitan: + vars: + target: kapitan-example + dependencies: + - type: git + output_path: source/kapitan + source: git@github.com:kapicorp/kapitan.git + subdir: kapitan + ref: master + compile: + - input_paths: + - source/kapitan/version.py + input_type: jinja2 # just to copy the file over to target + output_path: . + ``` + +=== "`http`" + + ### Syntax + + ```yaml + parameters: + kapitan: + dependencies: + - type: http | https # mkdocs (2)! + output_path: path/to/file # mkdocs (1)! + source: http[s]:// # mkdocs (2)! + unpack: True | False # mkdocs (3)! + ``` + + 1. `output_path` must fully specify the file name. For example: + 2. http[s] types can fetch external dependencies available at `http://` or `https://` URL. + 3. archive mode: download and unpack + + ### Examples + + === "Single file" + + + === "Archive" + + Say we want to download kapitan README.md file. Since it's on Github, we can access it as . Using the following inventory, we can copy this to our target folder: + + ```yaml + parameters: + kapitan: + vars: + target: kapitan-example + dependencies: + - type: https + output_path: README.md + source: https://raw.githubusercontent.com/kapicorp/kapitan/master/README.md + compile: + - input_paths: + - README.md + input_type: jinja2 + output_path: . + ``` + +=== "`helm`" + + ### Syntax + + ```yaml + parameters: + kapitan: + dependencies: + - type: helm + output_path: path/to/chart + source: http[s]|oci:// + version: + chart_name: + helm_path: + ``` + + Fetches helm charts and any specific subcharts in the `requirements.yaml` file. + + `helm_path` can be used to specify where the `helm` binary name or path. + 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). + + ### Examples + + If we want to download the prometheus helm chart we simply add the dependency to the monitoring target. + We want a specific version `11.3.0` so we put that in. + + ```yaml + parameters: + kapitan: + vars: + target: monitoring + dependencies: + - type: helm + output_path: charts/prometheus + source: https://kubernetes-charts.storage.googleapis.com + version: 11.3.0 + chart_name: prometheus + compile: + - input_type: helm + output_path: . + input_paths: + - charts/prometheus + helm_values: + alertmanager: + enabled: false + helm_params: + namespace: monitoring + name: prometheus + ``` -```shell -$ kapitan compile --fetch -t monitoring -Dependency helm chart prometheus being fetch with using latest version available -Dependency helm chart prometheus and version : fetching now -Dependency helm chart prometheus and version : successfully fetched -Dependency helm chart prometheus and version : saved to charts/prometheus -Compiled monitoring (1.58s) - -$ tree -L 3 -├── charts -│ └── prometheus -│ ├── Chart.yaml -│ ├── README.md -│ ├── charts -│ ├── requirements.lock -│ ├── requirements.yaml -│ ├── templates -│ └── values.yaml -├── compiled -│ ├── monitoring -├── inventory - ├── classes - ├── common.yml - ├── component -``` diff --git a/kapitan/dependency_manager/base.py b/kapitan/dependency_manager/base.py index 4a74d28c0..20abe4e1f 100644 --- a/kapitan/dependency_manager/base.py +++ b/kapitan/dependency_manager/base.py @@ -59,7 +59,7 @@ def fetch_dependencies(output_path, target_objs, save_dir, force, pool): if full_output_path in deps_output_paths[source_uri]: # if the output_path is duplicated for the same source_uri - logger.warning("Skipping duplicate output path for uri %s", source_uri) + logger.debug("Skipping duplicate output path for uri %s", source_uri) continue else: deps_output_paths[source_uri].add(full_output_path) @@ -124,10 +124,11 @@ def fetch_git_dependency(dep_mapping, save_dir, force, item_type="Dependency"): "{} {}: subdir {} not found in repo".format(item_type, source, sub_dir) ) if force: - copy_tree(copy_src_path, output_path) + copied = copy_tree(copy_src_path, output_path, verbose=0) else: - safe_copy_tree(copy_src_path, output_path) - logger.info("%s %s: saved to %s", item_type, source, output_path) + copied = safe_copy_tree(copy_src_path, output_path) + if copied: + logger.info("%s %s: saved to %s", item_type, source, output_path) def fetch_git_source(source, save_dir, item_type): @@ -136,10 +137,10 @@ def fetch_git_source(source, save_dir, item_type): if os.path.exists(save_dir): rmtree(save_dir) logger.debug("Removed %s", save_dir) - logger.info("%s %s: fetching now", item_type, source) + logger.debug("%s %s: fetching now", item_type, source) try: Repo.clone_from(source, save_dir) - logger.info("%s %s: successfully fetched", item_type, source) + logger.debug("%s %s: successfully fetched", item_type, source) logger.debug("Git clone cached to %s", save_dir) except GitCommandError as e: logger.error(e) @@ -194,7 +195,7 @@ def fetch_http_dependency(dep_mapping, save_dir, force, item_type="Dependency"): copyfile(cached_source_path, output_path) else: safe_copy_file(cached_source_path, output_path) - logger.info("%s %s: saved to %s", item_type, source, output_path) + logger.debug("%s %s: saved to %s", item_type, source, output_path) def fetch_http_source(source, save_path, item_type): @@ -203,9 +204,9 @@ def fetch_http_source(source, save_path, item_type): if os.path.exists(save_path): os.remove(save_path) logger.debug("Removed %s", save_path) - logger.info("%s %s: fetching now", item_type, source) + logger.debug("%s %s: fetching now", item_type, source) content, content_type = make_request(source) - logger.info("%s %s: successfully fetched", item_type, source) + logger.debug("%s %s: successfully fetched", item_type, source) if content is not None: with open(save_path, "wb") as f: f.write(content) @@ -237,15 +238,18 @@ def fetch_helm_chart(dep_mapping, save_dir, force): parent_dir = os.path.dirname(output_path) if parent_dir != "": os.makedirs(parent_dir, exist_ok=True) + if force: - copy_tree(cached_repo_path, output_path) + copied = copy_tree(cached_repo_path, output_path, verbose=0) else: - safe_copy_tree(cached_repo_path, output_path) - logger.info("Dependency %s: saved to %s", source.chart_name, output_path) + copied = safe_copy_tree(cached_repo_path, output_path) + + if copied: + logger.info("Dependency %s: saved to %s", source.chart_name, output_path) 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") + logger.debug("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"] @@ -268,8 +272,8 @@ def fetch_helm_archive(helm_path, repo, chart_name, version, save_path): else: # rename chart to requested name os.rename(os.path.join(save_dir, chart_name), save_path) - logger.info("Dependency helm chart %s and version %s: successfully fetched", chart_name, version) - logger.info("Dependency helm chart %s and version %s: saved to %s", chart_name, version, save_path) + logger.debug("Dependency helm chart %s and version %s: successfully fetched", chart_name, version) + logger.debug("Dependency helm chart %s and version %s: saved to %s", chart_name, version, save_path) def exists_in_cache(item_path): diff --git a/kapitan/reclass b/kapitan/reclass index 856b34cb7..d220e896a 160000 --- a/kapitan/reclass +++ b/kapitan/reclass @@ -1 +1 @@ -Subproject commit 856b34cb77811d665c6346883238d436ac5c4924 +Subproject commit d220e896a2465783abf298d71eb927de1f53a0ac diff --git a/kapitan/remoteinventory/fetch.py b/kapitan/remoteinventory/fetch.py index d51530e01..38569eba5 100644 --- a/kapitan/remoteinventory/fetch.py +++ b/kapitan/remoteinventory/fetch.py @@ -54,7 +54,7 @@ def fetch_inventories(inventory_path, target_objs, save_dir, force, pool): if output_path in inv_output_path[source_uri]: # if the output_path is duplicated for the same source_uri - logger.warning("Skipping duplicate output path for uri %s", source_uri) + logger.debug("Skipping duplicate output path for uri %s", source_uri) continue else: inv_output_path[source_uri].add(output_path) diff --git a/kapitan/utils.py b/kapitan/utils.py index 90699d59e..bf53588ab 100644 --- a/kapitan/utils.py +++ b/kapitan/utils.py @@ -589,7 +589,7 @@ def safe_copy_file(src, dst): dir = os.path.dirname(dst) if os.path.isfile(dst): - logger.warning("Not updating %s (file already exists)", dst) + logger.debug("Not updating %s (file already exists)", dst) return (dst, 0) _copy_file_contents(src, dst) logger.debug("Copied %s to %s", src, dir) @@ -627,7 +627,8 @@ def safe_copy_tree(src, dst): outputs.extend(safe_copy_tree(src_name, dst_name)) else: - safe_copy_file(src_name, dst_name) - outputs.append(dst_name) + _, value = safe_copy_file(src_name, dst_name) + if value: + outputs.append(dst_name) return outputs From 28c89917a3ca4a806ac35559eb5082c61b140127 Mon Sep 17 00:00:00 2001 From: Luis Buriola Date: Tue, 2 May 2023 21:55:23 +0100 Subject: [PATCH 4/4] Release 0.32.0rc0 --- kapitan/version.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kapitan/version.py b/kapitan/version.py index 6f79a37a3..d950fc9b4 100644 --- a/kapitan/version.py +++ b/kapitan/version.py @@ -8,7 +8,7 @@ """Project description variables.""" PROJECT_NAME = "kapitan" -VERSION = "0.31.1rc3" +VERSION = "0.32.0rc0" DESCRIPTION = "Generic templated configuration management for Kubernetes, Terraform and other things" AUTHOR = "Ricardo Amaro" AUTHOR_EMAIL = "ramaro@kapicorp.com" diff --git a/pyproject.toml b/pyproject.toml index 8329fbffb..e92a61073 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ classifiers = [ "Programming Language :: Python :: 3.9", ] license = "Apache-2.0" -version = "0.31.1rc3" +version = "0.32.0rc0" packages = [ { include = "kapitan" }, { include = "kapitan/reclass" },