Jenney
Jenney

Reputation: 291

Helm convert data for nginx template

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

Answers (3)

AlanAlfaro
AlanAlfaro

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

easyfan
easyfan

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

Evan S.
Evan S.

Reputation: 91

Try removing the colon after server_name.

server_name {{ print "kiftb." .Values.global.host | quote }}

...

Upvotes: 2

Related Questions