首页 > 解决方案 > Jinja2中的版本号排序列表

问题描述

我正在尝试使用 Ansible 从其网站获取软件产品的最高版本号。我可以毫无问题地获得包含版本号的列表,如下所示:

set_fact:
  app_version: "{{ lookup('url', 'https://example.com/product/versions.json') 
    | regex_findall('"version":"(.+?)"', '\\1') 
    | unique }}"

问题是要获得最高版本号,因为sort()过滤器比较纯字符串,而不是像人类那样。

例子:

---
- hosts: localhost
  gather_facts: no
  vars:
    list: [ '6.13.15', '6.5.8', '6.14.5' ]
  tasks:
  - name: "sort version numbers"
    set_fact:
      app_version: "{{ list | sort }}"
  - name: debug
    debug:
      var: app_version

这导致输出:

ok: [localhost] => {
    "app_version": [
        "6.13.15",
        "6.14.5",
        "6.5.8"
    ]
}

这显然是错误的,6.5应该在之前6.13,而不是之后。有什么方法可以像人类一样使用 Jinja2 过滤器对列表进行排序,或者至少可以正确地对版本号进行排序?

标签: sortingansiblejinja2

解决方案


推荐阅读