Reputation: 291
Im using the following file by helm
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-cfg
data:
default.conf: |-
{{ .Files.Get "config/nginx.conf" | nindent 4 }}
and I got the following error:
Error: YAML parse error on ops/templates/config/nginx.conf: error converting YAML to JSON: yaml: line 4: mapping values are not allowed in this context
The nginx file looks like following
nginx.conf
server {
listen 80;
listen [::]:80;
server_name: {{ print "kiftb." .Values.global.host | quote }} // this is the error line
...
The line with the sever_name
create the error.
Any idea how to solve it?
update
As suggested by @Evan I've tried to remove the colon,
server_name {{ print "kiftb." .Values.global.host | quote }}
And I got an error:
error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type releaseutil.SimpleHead
helm.go:81: [debug] error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type releaseutil.SimpleHead
Any Idea how to overcome this? is there any workaround ?
Upvotes: 3
Views: 5124
Reputation: 1
In my configmap.yaml template I'm building the nginx.conf in-line via Helm multi-line strings as such:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-cfg
data:
default.conf: |
server {
listen 8080;
server_name {{ .Values.nginx.serverName }};
...
}
This allows Helm values to be injected in. Then leverage Volumes and VolumeMounts to drop the file in the respective path.
See another example I found.
Upvotes: 0
Reputation: 11
Sounds like you put the conf file in a wrong path. Helm deals with all the files inside ${chart_path}/templates/
as template or tpl files, which should be composed in YAML file. So basically you are facing the issue that helm are trying to parse ops/templates/config/nginx.conf
as a template file, and definitely it will fail.
The solution would be: move your conf file out of the path ops/templates
, use ops/config/nginx.conf
would be fine, and you even do not need change anything in your configmap script, it will work.
Upvotes: 1
Reputation: 91
Try removing the colon after server_name
.
server_name {{ print "kiftb." .Values.global.host | quote }}
...
Upvotes: 2