繁体   English   中英

使用jinja2比较版本号

[英]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应该是字符串(在您的示例中它是一个列表)。

使用 Jinja2

使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM