Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何在Ansible中对复杂版本号进行排序_Sorting_Ansible_Jinja2 - Fatal编程技术网

Sorting 如何在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

我正在构建一个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.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 }}"