[英]Compare version numbers using jinja2
我正在使用 jinja2 模板来安装/升级软件包。
逻辑是为当前安装的版本设置一个变量,并将其与可用版本进行比较。 它运行良好,但是一旦我们传入 10.x,比较就停止工作了。
是否可以强制转换变量以便正确识别 10.9.8 大于 9.8.7?
谢谢
current_version=['9.8.7']
{% if current_version < '10.9.8' %}
有一个特殊的测试version_compare :
{% if current_version | version_compare('10.9.8', '<') %}
current_version
应该是字符串(在您的示例中它是一个列表)。
使用split并且由于序列比较的工作方式,以下应该做得很好:
{% if current_version.split('.') | map('int') < '10.9.8'.split('.') | map('int') %}
测试:
Split: {{ current_version.split('.') }}
Split + cast: {{ current_version.split('.') | map('int') }}
---
Is {{ current_version.split('.') | map('int') }} < {{ '10.9.8'.split('.') | map('int') }}?
{% if current_version.split('.') | map('int') < '10.9.8'.split('.') | map('int') %}
Yes
{% endif %}
其中, current_version: "9.8.7"
给出:
Split: ['9', '8', '7']
Split + cast: [9, 8, 7]
---
Is [9, 8, 7] < [10, 9, 8]?
Yes
使用普通的 jinja2,没有 ansible 或其他扩展:
{% if my_version.split('.') | map('int') | list >= [10, 9, 8] %}
通过将每个元素转换为int
,您可以确保它不会按字典顺序进行比较。
在 saltstack 中,您可以使用pkg.version_cmp
在此处查看我的回复: 如何比较 salt sls 文件中的版本字符串
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.