gpt4 book ai didi

ansible - 在 Ansible/Jinja2 中格式化项目列表

转载 作者:行者123 更新时间:2023-12-05 01:07:57 25 4
gpt4 key购买 nike

是否可以使用 Ansible/Jinja2 中的格式化字符串将列表/字典列表转换为字符串列表?

我知道我可以这样做:

{{["First: %d", "Second: %d"] | map("format", 1) | join(", ") }}

获取First: 1, Second 1.

有没有可能做类似的事情

{{[[1, 1], [2, 2]] | map("format", "Num %d, %d") | join(", ") }}

并导致 Num 1, 1, Num 2, 2?

最佳答案

  • 没有。这是不可能的。函数第一个参数format必须是格式字符串。例如,
    - debug:
msg: "{{ ['v1 %s', 'v2 %s']|map('format', 'XYZ')|list }}"

给予

msg:
- v1 XYZ
- v2 XYZ

_list: [[1, 1], [2, 2]]

下面的表达式

result: "{{ _list|
map('join', ',')|
map('regex_replace', _regex, _replace)|
join(', ') }}"
_regex: '^(.*),(.*)$'
_replace: 'Num \1, \2'

给予

result: Num 1, 1, Num 2, 2

  • 下一个选项是过滤器product。下面的表达式给出了相同的结果
result: "{{ ['Num']|
product(_list|map('join', ', '))|
map('join', ' ')|
join(', ') }}"

  • 下一个选项是 Jinja .下面的表达式给出了相同的结果
result: |-
{% for i in _list %}
Num {{ i|join(', ') }}{% if not loop.last %}, {% endif %}
{%- endfor %}

<支持>

完整的测试手册示例

- hosts: localhost

vars:
_list: [[1, 1], [2, 2]]
result1: "{{ ['Num']|
product(_list|map('join', ', '))|
map('join', ' ')|
join(', ') }}"
result2: "{{ _list|
map('join', ',')|
map('regex_replace', _regex, _replace)|
join(', ') }}"
_regex: '^(.*),(.*)$'
_replace: 'Num \1, \2'
result3: |-
{% for i in _list %}
Num {{ i|join(', ') }}{% if not loop.last %}, {% endif %}
{%- endfor %}

tasks:
- debug:
msg: "{{ ['v1 %s', 'v2 %s']|map('format', 'XYZ')|list }}"
- debug:
var: result1
- debug:
var: result2
- debug:
var: result3
- assert:
that:
- result1 == 'Num 1, 1, Num 2, 2'
- result2 == 'Num 1, 1, Num 2, 2'
- result3 == 'Num 1, 1, Num 2, 2'

关于ansible - 在 Ansible/Jinja2 中格式化项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66655224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com