按照特定值对Ansible中的字典进行排序。

6

我有一个在Ansible中作为变量设置的字典,如下:

my_users:
  name1:
    value: some_value1
    id: 99
    type: some_type1
  name2:
    value: some_value2
    id: 55
    type: some_type2
  name3:
    value: some_value3
    id: 101
    type: some_type3

我希望能够按照id字段对其进行排序并再次打印。我尝试使用dictsort并选择按值选项,但我找不到指定特定值进行排序的方法。

  tasks:
    - debug:
        msg: "{{ item }}"
      with_items: "{{ my_users | dictsort(false, 'value') }}"
1个回答

9

Jinja2 dictsort 作用于字典(扁平化)并允许按键或值排序(这就是'value'参数的含义——它是一个开关,而不是嵌套字典中某个键的名称)。

您可以在Python中编写一个简单的过滤器插件:

#!/usr/bin/python
class FilterModule(object):
    def filters(self):
        return {
            'sortbysubkey': self.sortbysubkey,
        }

    def sortbysubkey(self, dict_to_sort, sorting_key):
        return sorted(dict_to_sort.items(), key=lambda x: x[1][sorting_key])

2
最终代码:msg: "{{ my_users | sortbysubkey('id') }}" - Salim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接