以自然字母数字顺序排列ansible中的列表

Sorting list in ansible in natural alphanumeric order

有没有办法以自然方式对 Ansible / Jinja 中的列表进行排序?

例如这是列表

test
test123
test12
test5
test1234test
test22te

而且我需要它来考虑整体而不是个别的数字,所以 test12 在 test5 下,依此类推...

创建一个列表,其属性 index 为整数类型,例如

    - set_fact:
        l2: "{{ l2|default([]) +
                [{'index': (_index|length > 0)|ternary(_index|int, 0),
                  'name': item}] }}"
      loop: "{{ l1 }}"
      vars:
        _regex: '^test(\d*)\D*$'
        _replace: ''
        _index: "{{ item|regex_replace(_regex, _replace) }}"
    - debug:
        msg: "{{ l2|sort(attribute='index')|
                    map(attribute='name')|
                    list }}"

给予

  msg:
  - test
  - test5
  - test12
  - test22te
  - test123
  - test1234test

最后制作了符合我需要的 jinja 过滤器“natsort_filter.py”。如果你喜欢,可以在这里获取:

https://gitlab.privatecloud.sk/vladoportos/custom-jinja-filters

它确实需要 python 的 natsort 模块,但它工作得很好:)