template error while templating string: unexpected '.'

Hi

How can I avoid that the template engine throws this error ?

Task

`

- name: Get Service Account Token
  shell: |
    /usr/local/bin/oc get sa/jenkins -n {{ namespace }} --template='{{range .secrets}}{{ .name }} {{end}}' | xargs -n 1 oc get secret --template='{{ if .data.token }}{{ .data.token }}{{end}}' | head -n 1 | base64 -D -
  register: sa_jenkins_token

`

Error

`

  fatal: [10.8.244.145]: FAILED! => {"failed": true, "msg": "template error while templating string: 
  
  unexpected '.'. String: /usr/local/bin/oc get sa/jenkins -n {{ namespace }} --template='{{range .secrets}}{{ .name }} {{end}}' | xargs -n 1 oc get secret --template='{{ if .data.token }}{{ .data.token }}{{end}}' | head -n 1 | base64 -D -"}

`

Regards

Charles

Hi

How can I avoid that the template engine throws this error ?

Don't use . in variable name.

https://docs.ansible.com/ansible/latest/playbooks_variables.html#what-makes-a-valid-variable-name

Task

- name: Get Service Account Token
   shell: |
     /usr/local/bin/oc get sa/jenkins -n {{ namespace }} --template='{{range .secrets}}{{ .name }} {{end}}' | xargs -n 1 oc get secret --template='{{ if .data.token }}{{ .data.token }}{{end}}' | head -n 1 | base64 -D -
   register: sa_jenkins_token

This looks very strange and I don't understand what you are trying to do.
{{ }} is only used for variables not Jinja logic.

The shell command that I want to execute is

`

oc get sa/jenkins -n infra --template=‘{{range .secrets}}{{ .name }} {{end}}’ | xargs -n 1 oc get secret --template=‘{{ if .data.token }}{{ .data.token }}{{end}}’ | head -n 1 | base64 -D -

`

and I will get as response a token

So the {{ }} characters that you see within my command are used to extract info using openshift oc template

I will change my syntax to use jsonpath

The problem is that you seem to be using templating that the oc command will use that overlaps with template syntax of jinja.

You will likely need to wrap your command in {% raw %}command with {{ here }}{% endraw %}

See http://jinja.pocoo.org/docs/dev/templates/#escaping

Has the same error, by trying send this way:

An unhandled exception occurred while templating ‘Alertname: {{ .GroupLabels.alertname }}\n Severity: {{ .CommonLabels.severity }}\n {{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}’. Error was a <class ‘ansible.errors.AnsibleError’>, original message: template error while templating string: unexpected ‘.’. String: Alertname: {{ .GroupLabels.alertname }}\n Severity: {{ .CommonLabels.severity }}\n {{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"
}

?
Guys, make some advice, please.

пятница, 27 октября 2017 г. в 19:30:33 UTC+3, Matt Martz: