gpt4 book ai didi

sorting - 如何在 Ansible 中对复杂的版本号进行排序

转载 作者:行者123 更新时间:2023-12-04 13:19:09 25 4
gpt4 key购买 nike

我正在构建一个 Ansible 剧本,我想在其中检索软件的最新版本。为此,我在 Ansible 中使用了“排序”过滤器。但是,当使用版本号时,这变得有点困难,因为版本号更复杂并且不是真正的数字,例如0.2.1 , 0.10.1 .

这就是我现在正在做的:

- name: Set version to compare
set_fact:
versions:
- "0.1.0"
- "0.1.5"
- "0.11.11"
- "0.9.11"
- "0.9.3"
- "0.10.2"
- "0.6.1"
- "0.6.0"
- "0.11.0"
- "0.6.5"

- name: Sorted list
debug:
msg: "{{ versions | sort }}"

- name: Show the latest element
debug:
msg: "{{ versions | sort | last }}"

只要版本号低于数字 10(例如 0.9.3,但不是 0.10.2),上面的剧本就可以工作。

要显示问题:

TASK [Set version to compare] ***************************************************************************************************************
ok: [localhost]

TASK [Sorted list] **************************************************************************************************************************
ok: [localhost] => {
"msg": [
"0.1.0",
"0.1.5",
"0.10.2",
"0.11.0",
"0.11.11",
"0.6.0",
"0.6.1",
"0.6.5",
"0.9.11",
"0.9.3"
]
}

TASK [Show the latest element] **************************************************************************************************************
ok: [localhost] => {
"msg": "0.9.3"
}


在此示例中,所需值是 0.11.11
有人知道在 Ansible 中对复杂版本号进行排序的好方法吗?
任何帮助,将不胜感激。谢谢。

最佳答案

一个选项是写一个 filter plugin .

> cat filter_plugins/sort_versions.py
from distutils.version import LooseVersion


def filter_sort_versions(value):
return sorted(value, key=LooseVersion)


class FilterModule(object):
filter_sort = {
'sort_versions': filter_sort_versions,
}

def filters(self):
return self.filter_sort

那么下面的简单玩法
- debug:
msg: "{{ versions | sort_versions }}"

给出:
"msg": [
"0.1.0",
"0.1.5",
"0.6.0",
"0.6.1",
"0.6.5",
"0.9.3",
"0.9.11",
"0.10.2",
"0.11.0",
"0.11.11"
]

关于sorting - 如何在 Ansible 中对复杂的版本号进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56063612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com