如何从 Ansible with_subelements 列表中对项目进行排序

Ran*_*ndy 5 ansible ansible-template

我正在使用with_subelements循环遍历一些嵌套数据。我想遍历嵌套元素,但在迭代时对第二级数据进行排序。

    - name: Can I haz sorted nested elements?
      debug: msg="device={{item.0.key}}, mounted at {{item.1.mount_point}}"
      when: profile_data.enabled
      with_subelements:
        - profile_data.layouts
        - partitions
Run Code Online (Sandbox Code Playgroud)

我尝试了一些方法来对列表进行排序,但我怀疑我with_subelements是否以应该使用的方式使用它。

我试过这个没有成功:

      with_subelements:
        - profile_data.layouts
        - "{{ partitions|sort(attribute='number') }}"
Run Code Online (Sandbox Code Playgroud)

这可能不编写我自己的with_sorted_subelements插件吗?

Kon*_*rov 6

这完全取决于您真正需要的结构中的哪些数据。

这是对嵌套元素进行排序的示例:

---
- hosts: localhost
  gather_facts: no
  vars:
    mydict:
      key1:
        key: hello
        persons:
          - name: John
            age: 30
          - name: Mark
            age: 50
          - name: Peter
            age: 40
      key2:
        key: world
        persons:
          - name: Mary
            age: 30
          - name: Julia
            age: 25
          - name: Paola
            age: 35
  tasks:
    - debug:
        msg: "{{ item.0.k }} {{ item.1.age }} {{ item.1.name }}"
      with_subelements:
        - "{{ mydict | json_query('*.{k:key, p:sort_by(persons, &age)}') }}"
        - p
Run Code Online (Sandbox Code Playgroud)

下面我就keyk和分类personsp从原来的字典,它喂with_subelements

输出是:

"msg": "world 25 Julia"
"msg": "world 30 Mary"
"msg": "world 35 Paola"
"msg": "hello 30 John"
"msg": "hello 40 Peter"
"msg": "hello 50 Mark"
Run Code Online (Sandbox Code Playgroud)