mirror of
https://github.com/helmfile/helmfile.git
synced 2026-10-22 09:30:54 +02:00
feat: Release Template (#439)
This feature is supposed to help advanced use-cases like Conventional Directory Structure explained in several issues like #428. Newly added configuration keys `templates`, `missingFileHandler`, and the ability to defer executing template expressions in `values`, `secrets`, `namespace`, and `chart` of releases allows you to abstract away repetitions into a reusable template: ```yaml templates: default: &default missingFileHandler: Warn namespace: "{{`{{ .Release.Name }}`}}" chart: stable/{{`{{ .Release.Name }}`}} values: - config/{{`{{ .Release.Name }}`}}/values.yaml - config/{{`{{ .Release.Name }}`}}/{{`{{ .Environment.Name }}`}}.yaml secrets: - config/{{`{{ .Release.Name }}`}}/secrets.yaml - config/{{`{{ .Release.Name }}`}}/{{`{{ .Environment.Name }}`}}-secrets.yaml releases: - name: envoy <<: *default ``` See the updated documentation for more details. Resolves #428
This commit is contained in:
@@ -30,6 +30,65 @@ If you want a kind of default values that is used when a missing key was referen
|
||||
|
||||
Now, you get `1` when there is no `eventApi.replicas` defined in environment values.
|
||||
|
||||
## Release Template / Conventional Directory Structure
|
||||
|
||||
Introducing helmfile into a large-scale project that involes dozens of releases often results in a lot of repetitions in `helmfile.yaml` files.
|
||||
|
||||
The example below shows repetitions in `namespace`, `chart`, `values`, and `secrets`:
|
||||
|
||||
```yaml
|
||||
releases:
|
||||
# *snip*
|
||||
- name: heapster
|
||||
namespace: kube-system
|
||||
chart: stable/heapster
|
||||
version: 0.3.2
|
||||
values:
|
||||
- "./config/heapster/values.yaml"
|
||||
- "./config/heapster/{{ .Environment.Name }}.yaml"
|
||||
secrets:
|
||||
- "./config/heapster/secrets.yaml"
|
||||
- "./config/heapster/{{ .Environment.Name }}-secrets.yaml"
|
||||
|
||||
- name: kubernetes-dashboard
|
||||
namespace: kube-system
|
||||
chart: stable/kubernetes-dashboard
|
||||
version: 0.10.0
|
||||
values:
|
||||
- "./config/kubernetes-dashboard/values.yaml"
|
||||
- "./config/kubernetes-dashboard/{{ .Environment.Name }}.yaml"
|
||||
values:
|
||||
- "./config/kubernetes-dashboard/secrets.yaml"
|
||||
- "./config/kubernetes-dashboard/{{ .Environment.Name }}-secrets.yaml"
|
||||
```
|
||||
|
||||
This is where Helmfile's advanced feature called Release Template comes handy.
|
||||
|
||||
It allows you to abstract away the repetitions in releases into a template, which is then included and executed by using YAML anchor/alias:
|
||||
|
||||
```yaml
|
||||
templates:
|
||||
default: &default
|
||||
chart: stable/{{`{{ .Release.Name }}`}}
|
||||
namespace: kube-system
|
||||
# This prevents helmfile exiting when it encounters a missing file
|
||||
missingFileHandler: Warn
|
||||
values:
|
||||
- config/{{`{{ .Release.Name }}`}}/values.yaml
|
||||
- config/{{`{{ .Release.Name }}`}}/{{`{{ .Environment.Name }}`}}.yaml
|
||||
secrets:
|
||||
- config/{{`{{ .Release.Name }}`}}/secrets.yaml
|
||||
- config/{{`{{ .Release.Name }}`}}/{{`{{ .Environment.Name }}`}}-secrets.yaml
|
||||
|
||||
releases:
|
||||
- name: heapster
|
||||
<<: *default
|
||||
- name: kubernetes-dashboard
|
||||
<<: *default
|
||||
```
|
||||
|
||||
See the [issue 428](https://github.com/roboll/helmfile/issues/428) for more context on how this is supposed to work.
|
||||
|
||||
## Layering
|
||||
|
||||
You may occasionally end up with many helmfiles that shares common parts like which repositories to use, and whichi release to be bundled by default.
|
||||
|
||||
Reference in New Issue
Block a user