使用jinja2比较版本号

时间:2017-09-20 14:08:09

标签: ansible jinja2 salt-stack

我正在使用jinja2模板来安装/升级软件包。

逻辑是为当前安装的版本设置变量,并将其与可用版本进行比较。它工作正常,但一旦我们传入10.x,比较退出工作。

是否可以转换变量以便正确识别10.9.8是否大于9.8.7?

由于

current_version=['9.8.7']

{% if current_version < '10.9.8' %}

4 个答案:

答案 0 :(得分:5)

有一项特殊测试version_compare

{% if current_version | version_compare('10.9.8', '<') %}

current_version应为字符串(在您的示例中为列表)。

答案 1 :(得分:1)

与Jinja2

使用split并由于sequence comparison的工作原理,以下应该可以正常工作:

{% if current_version.split('.') < '10.9.8'.split('.') %}

答案 2 :(得分:0)

在saltstack中,您可以使用pkg.version_cmp

请在此处查看我的回复:How to compare version strings in salt sls files

答案 3 :(得分:0)

使用普通的 jinja2,没有 ansible 或其他扩展:

{% if my_version.split('.') | map('int') | list >= [10, 9, 8]  %}

通过将每个元素转换为 int,您可以确保它不会按字典顺序进行比较。