Sorting 如何在Ansible中对复杂版本号进行排序
我正在构建一个Ansible playbook,希望在其中检索软件的最新版本。为此,我在Ansible中使用了“排序”过滤器。然而,当使用版本号时,这变得有点困难,版本号更复杂,并且不是真正的数字,例如Sorting 如何在Ansible中对复杂版本号进行排序,sorting,ansible,jinja2,Sorting,Ansible,Jinja2,我正在构建一个Ansible playbook,希望在其中检索软件的最新版本。为此,我在Ansible中使用了“排序”过滤器。然而,当使用版本号时,这变得有点困难,版本号更复杂,并且不是真正的数字,例如0.2.1,0.10.1 这就是我现在正在做的: -name:设置要比较的版本 设定事实: 版本: - "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
0.2.1
,0.10.1
这就是我现在正在做的:
-name:设置要比较的版本
设定事实:
版本:
- "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"
-名称:已排序列表
调试:
msg:{{版本|排序}}”
-名称:显示最新的元素
调试:
msg:{versions | sort | last}}
只要版本号保持在数字10之下(例如0.9.3,但不是0.10.2),上述剧本就可以工作
要显示问题:
任务[设置要比较的版本]***************************************************************************************************************
确定:[本地主机]
任务[已排序列表]**************************************************************************************************************************
确定:[本地主机]=>{
“味精”:[
"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"
]
}
任务[显示最新的元素]**************************************************************************************************************
确定:[本地主机]=>{
“味精”:“0.9.3”
}
在此示例中,所需值为0.11.11
有人知道在Ansible中排序复杂版本号的好方法吗?
任何帮助都将不胜感激。谢谢。您需要的部分内容是,但是,它是建立在用户只需要一次比较的想法之上的。因此,您需要使用胶水才能找到“最新”的:
(我并不认为这是最佳解决方案,因为它很可能会多次比较不同版本,但对于较小的版本列表,它应该可以很好地工作)一个选择是编写一个 然后是下面的简单游戏
- 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"
]
您可以使用jinja2比较版本,而不是安装过滤器插件
- name: test
set_fact:
max_number: "{{ item }}"
when: max_number |default('0') is version(item, '<')
loop: "{{ master_version }}"
-名称:测试
设定事实:
最大值:“{{item}}”
当:max_number |默认值('0')为版本(项目,'
"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"
]
- name: test
set_fact:
max_number: "{{ item }}"
when: max_number |default('0') is version(item, '<')
loop: "{{ master_version }}"