假设我有一个类似的dict列表
elements:
- key: first_key
value: first_value
- key: key_number_2
value: middle_value
- key: last_key
value: three
我想有一个字符串列表格式化列表这个{key}="{value}"
,所以预期的结果是
['first_key="first_value"', 'key_number_2="middle_value"', 'last_key="three"']
在Python中,我会做['{key}="{value}"'.format(**i) for i in elements]
,但在jinja2中没有列表理解。
这在Ansible中应该是什么样子?
评论:
最终结果实际上被假设为
first_key="first_value", key_number_2="middle_value", last_key="three"
,但我假设我应该解决上面的问题,然后通过join
过滤器。如果错误,请纠正我这将成为Ansible模板的一部分。
如果您需要一个包含值的变量,您可以简单地使用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模板中需要它,您可以使用普通的Jinjafor
和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