我正在使用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
我已尝试过一些事情来对列表进行排序,但我怀疑我是否按照它应该使用的方式使用with_subelements
。
我尝试了这个没有成功:
with_subelements:
- profile_data.layouts
- "{{ partitions|sort(attribute='number') }}"
如果不编写我自己的with_sorted_subelements
插件,这可能吗?
答案 0 :(得分:3)
这取决于您真正需要的结构中的确切数据。
以下是对嵌套元素进行排序的示例:
---
- 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
在此,我将key
作为k
并将persons
排序为原始字典中的p
,并将其提供给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"