Ansible通过with_items在数组中实际累积字典

我有以下任务(和debugging任务):

- name: get list of error logs set_fact: centralised_logs: "{{ centralised_logs | default([]) | union([{'name': '{{ item }} error log'}])}}" with_items: - "one" - "two" - "three" - debug: msg="{{ centralised_logs }}" 

我期望centralised_logs的事实是在union语句中累积一个包含插入string的字典数组,但是我得到了下面的内容(注意它适用于第二和第三项,但不是第一项):

 TASK [nginx : get list of error logs] ****************************************** ok: [127.0.0.1] => (item=one) ok: [127.0.0.1] => (item=two) ok: [127.0.0.1] => (item=three) TASK [nginx : debug] *********************************************************** fatal: [127.0.0.1]: FAILED! => {"failed": true, "msg": "[{'name': u'two error log'}, {'name': u'three error log'}, {'name': u'{{ item }} error log'}]: 'item' is undefined"} 

为什么第一个值无法正确插入?

Ansible版本2.1.0.0。

问题是,您尝试在另一个内部使用{{variable}}标记。

一个正确的例子是

 - name: get list of error logs set_fact: centralised_logs: "{{ centralised_logs | default([]) | union([{'name': item + ' error log'}])}}" with_items: - "one" - "two" - "three" - debug: msg="{{ centralised_logs }}" 

这会产生以下输出:

 TASK [debug] ******************************************************************* ok: [localhost] => { "msg": [ { "name": "one error log" }, { "name": "two error log" }, { "name": "three error log" } ] }