如果您需要一个带有值的变量,您可以简单地使用loop,然后确实使用join 过滤器:
- hosts: all
gather_facts: no
tasks:
- set_fact:
list: "{{ list | default([]) + [item.key ~ '=\"' ~ item.value ~ '\"'] }}"
loop: "{{ elements }}"
vars:
elements:
- key: first_key
value: first_value
- key: key_number_2
value: middle_value
- key: last_key
value: three
- debug:
msg: "{{ list | join(', ') }}"
会产生回顾:
PLAY [all] *******************************************************************************************************
TASK [set_fact] **************************************************************************************************
ok: [localhost] => (item={'key': 'first_key', 'value': 'first_value'})
ok: [localhost] => (item={'key': 'key_number_2', 'value': 'middle_value'})
ok: [localhost] => (item={'key': 'last_key', 'value': 'three'})
TASK [debug] *****************************************************************************************************
ok: [localhost] =>
msg: first_key="first_value", key_number_2="middle_value", last_key="three"
PLAY RECAP *******************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
现在,如果您在 Jinja 模板中需要此功能,您可以使用普通的 Jinja for 以及逗号的 loop.last 变量:
- hosts: all
gather_facts: no
tasks:
- debug:
msg: >-
{% for element in elements -%}
{{ element.key }}="{{ element.value }}"
{%- if not loop.last %}, {% endif %}
{%- endfor %}
vars:
elements:
- key: first_key
value: first_value
- key: key_number_2
value: middle_value
- key: last_key
value: three
会产生回顾:
PLAY [all] *******************************************************************************************************
TASK [debug] *****************************************************************************************************
ok: [localhost] =>
msg: first_key="first_value", key_number_2="middle_value", last_key="three"
PLAY RECAP *******************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0