I have the following tasks:
- name: Set default log options for Splunk
set_fact:
log_options_base:
tag: "{{ '{{' }}.ImageName{{ '}}' }}/{{ '{{' }}.Name{{ '}}' }}/{{ '{{' }}.ID{{ '}}' }}"
splunk-token: "{{ splunk_token }}"
splunk-url: "{{ splunk_url }}"
splunk-format: "json"
splunk-index: "my-dx"
labels: "{{ env }}"
when:
- log_driver is defined
- log_driver == 'splunk'
- name: Set extendend log options for Splunk
set_fact:
log_options_ext: "{{ log_options_base | combine({ 'env': NODE_ENV }) }}"
when:
- log_options_base != ""
Unfortunately I'm having the following issue:
template error while templating string: unexpected '.'. String: {{.ImageName}}/{{.Name}}/{{.ID}}
"The conditional check 'log_options_base != \"\"' failed.
The issue is definitely with the golang template but it is already escaped in my case.
Any idea?
when
statement is a Jinja2 expression itself, so Ansible tries to evaluate your string once again.
You should be good with !unsafe typing in this case:
- name: Set default log options for Splunk
set_fact:
log_options_base:
tag: !unsafe "{{.ImageName}}/{{.Name}}/{{.ID}}"
But I haven't used this syntax trick much, so there may be some side effects, test it before production use.
P.S. why do you compare dict var log_options_base
with empty string in log_options_base != ""
? May be you want is defined
test?