在 Ansible 中加入嵌套列表的元素

Joining elements of nested lists in Ansible

我有一个嵌套列表 str,如下所示:

[["22","ABC","XYZ"],["555","IJK","PQR"],...] 

我必须将内部列表的元素与 / 组合,然后将它们与 , 连接起来形成一个字符串,如:

22/ABC/XYZ,555/IJK/PQR,...

我试过 set_fact 和 jinja2 但没有成功。

- set_fact:
     str1: |-
       {%- set fs = "" -%}
       {%- set im = "" -%}
       {%- for i in str -%}
         {%- for elem in i -%}
           {%- set im = im + "/" + elem -%}
         {%- endfor -%}
         {%- set fs = fs + "," + im -%}
       {%- endfor -%}
       {{ fs }}
- debug: var=str1      

输出:

TASK [debug var=str1] **********************************
ok: [host1] => {
    "str1": "" 

预期输出:

TASK [debug var=str1] **********************************
ok: [host1] => {
    "str1": "22/ABC/XYZ,555/IJK/PQR" 

谢谢

使用 wiht_list 创建一个带有列表的 var,其中包含用 / 连接的项目,然后用 ,.

连接它
  - set_fact:
      str1: "{{ str1 | default([]) + [ item | join('/') ] }}"
    with_list: "{{ str }}"

  - debug:
      msg: "{{ str1 | join(',') }}"

首先 map 过滤器 join(/) 到列表的项目然后 join(,) 他们

  - set_fact:
      str1: "{{ str|map('join', '/')|join(',') }}"
  - debug: var=str1

给予

  str1: 22/ABC/XYZ,555/IJK/PQR