Home > database >  Helm dependencies - Reference to values inside the helm dependancy (dependency outputs)
Helm dependencies - Reference to values inside the helm dependancy (dependency outputs)

Time:12-23

I'll give the context first then the problem: I am interested in centralising a set of values that would be in my values.yaml.

Initial plan was to create a config map with the centralised values that I could load using the lookup helm function. Sadly for me the CD tool I use (ArgoCD) doesn't support lookup.

Current chain of thought would be to create a dummy helm chart that would contain the centralised values. I would set this helm chart as a dependency. Can I get some outputs out of this dependancy that can be used elsewhere? If yes, how to refer to them in the values.yaml?

CodePudding user response:

One approach could be like this:

Create a folder structure such as this

yourappfolder
- Chart.yaml
- value.yaml // the main value file
- value.dev.yaml //contains env-specific values and override value.yaml

and publish a completely new helm chart like my-generic-chart to a registry with default values already placed and update it in Chart.yaml as a dependency

# Chart.yaml
apiVersion: v2
name: myapplication
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
dependencies:
  - name: my-generic-chart
    version: 5.6.0
    repository: "URL to your my-default-chart"

and don't forget to put all the values under my-default-chart

# values.yaml
my-default-chart:
  image: nginx
  imageTag: 1
  envs:
    log-format: "json"
    log-level: "none"
    ..
    ..
 
# values.dev.yaml
my-default-chart:
  imageTag: 1.1
  envs:
    log-level: "debug"
    ..
    ..
 

the values.dev.yaml file will override the values in values.yaml and both of them together will override the values in the generic chart default values.yaml file.

Now you have to create a generic chart that fits to all of your applications or create a generic chart for each type of application

CodePudding user response:

Figured it is possible by 2 ways:

I create one chart "data" that doesn't create anything but creates template function (for example "data.project") then I use another

├── Chart.lock
├── Chart.yaml
├── charts
│   ├── data
│   │   ├── Chart.yaml
│   │   ├── templates
│   │   │   └── _helpers.tpl
│   │   └── values.yaml
│   ├── sub0
│   │   ├── Chart.yaml
│   │   ├── templates
│   │   │   └── configmap.yaml
│   │   └── values.yaml
└── values.yaml

charts/data/templates/_helpers.tpl contains:

{{- define "data.project" -}}
    project_name
{{- end }}

The top Chart.yaml contains:

---
apiVersion: v2
name: multi
type: application
version: 0.1.0
appVersion: "1.16.0"

dependencies:
  - name: data
    version: 0.1.0
    repository: "file://charts/data" # This is while testing locally, once shared in a central repository this will achieve the centralised data information
    import-values:
      - data
  - name: sub0
    version: 0.1.0
    repository: "file://charts/sub0"

Then from anywhere I can do:

"{{ include \"data.project\" . }}"

And obtain the value

Of course the "data" chart will need to live in a separate repository

  • Related