如何在ansible中定义格式化字符串列表



假设我有一个类似的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中应该是什么样子?


评论:

  1. 最终结果实际上被假设为first_key="first_value", key_number_2="middle_value", last_key="three",但我假设我应该解决上面的问题,然后通过join过滤器。如果错误,请纠正我

  2. 这将成为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模板中需要它,您可以使用普通的Jinjaforloop.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   

相关内容

  • 没有找到相关文章

最新更新