我正在使用jinja2模板来安装/升级软件包。
逻辑是为当前安装的版本设置变量,并将其与可用版本进行比较。它工作正常,但一旦我们传入10.x,比较退出工作。
是否可以转换变量以便正确识别10.9.8是否大于9.8.7?
由于
current_version=['9.8.7']
{% if current_version < '10.9.8' %}
答案 0 :(得分:5)
有一项特殊测试version_compare:
{% if current_version | version_compare('10.9.8', '<') %}
current_version
应为字符串(在您的示例中为列表)。
答案 1 :(得分:1)
使用split并由于sequence comparison的工作原理,以下应该可以正常工作:
{% if current_version.split('.') < '10.9.8'.split('.') %}
答案 2 :(得分:0)
在saltstack中,您可以使用pkg.version_cmp
答案 3 :(得分:0)
使用普通的 jinja2,没有 ansible 或其他扩展:
{% if my_version.split('.') | map('int') | list >= [10, 9, 8] %}
通过将每个元素转换为 int
,您可以确保它不会按字典顺序进行比较。