I'm passing the following string through values.yaml:
urls: http://example.com http://example2.com http://example3.com
Is there a way to create a list from this, so i can then do something like:
{{ range $urls }}
{{ . }}
{{ end }}
The problem is I'm passing the urls var in a dynamic fashion, and I'm also can't avoid using a single string for that (ArgoCD ApplicationSet wont let me pass a list).
Basically all you need is just add this line in your template yaml
:
{{- $urls := splitList " " .Values.urls }}
It will import urls
string from values.yaml
as the list so you will be able run your code which you posted in your question.
Simple example based on helm docs:
Let's get simple chart used in helm docs and prepare it:
helm create mychart
rm -rf mychart/templates/*
Edit values.yaml
and insert urls
string:
urls: http://example.com http://example2.com http://example3.com
Create ConfigMap in templates
folder (name it configmap.yaml
)
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
{{- $urls := splitList " " .Values.urls }}
urls: |-
{{- range $urls }}
- {{ . }}
{{- end }}
As can see, I'm using your loop (with "- " to avoid creating empty lines).
Install chart and check it:
helm install example ./mychart/
helm get manifest example
Output:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: example-configmap
data:
urls: |-
- http://example.com
- http://example2.com
- http://example3.com