我有以下任务:
- 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 != ""
不幸的是,我遇到了以下问题:
template error while templating string: unexpected '.'. String: {{.ImageName}}/{{.Name}}/{{.ID}}\n\n
"The conditional check 'log_options_base != \"\"' failed.
问题肯定在golang模板上,但在我的情况下它已经被转义了。
有什么想法吗?
答案 0 :(得分:2)
when
语句本身是一个Jinja2表达式,因此Ansible会再次尝试评估您的字符串。
在这种情况下,你应该善于!unsafe输入:
- name: Set default log options for Splunk
set_fact:
log_options_base:
tag: !unsafe "{{.ImageName}}/{{.Name}}/{{.ID}}"
但是我没有太多使用这种语法技巧,所以可能会有一些副作用,在生产使用之前测试它。
P.S。为什么要在log_options_base
中将dict var log_options_base != ""
与空字符串进行比较?您可能想要is defined
测试吗?