如何比较内核(或其他)版本号在Ansible



对于我正在开发的角色,我需要验证内核版本是否大于特定版本。

我已经发现了ansible_kernel的事实,但是有一个简单的方法来比较这个和其他版本吗?我想我可能会手动在.上爆炸版本字符串并比较数字,但我甚至找不到一个友好的过滤器来爆炸版本字符串,所以我很困惑。

有一个测试:

{{ ansible_distribution_version is version('12.04', '>=') }}
{{ sample_version_var is version('1.0', operator='lt', strict=True) }}

如果内核版本小于3,则打印主机IP地址

Ansible Version : 2.0.0.2
---
- hosts: all
  vars:
   kernel_version: "{{ ansible_kernel }}"
  tasks:
   - name: 'kernel version from facts'
     debug:
      msg: '{{ansible_all_ipv4_addresses}} {{ansible_kernel}}'
     when: ansible_kernel |  version_compare('3','<')
* *

在2.5版本中version_compare被重命名为version

* *

对于ansible>=2.9,这将不起作用,因为测试语法现在与过滤器严格分离。

https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html

可行的解决方案是:

{{ sample_version_var is version('1.0', operator='lt', strict=True) }}
...

要比较版本号,例如检查ansible_facts['distribution_version']版本是否大于或等于' 12.04 ',您可以使用版本测试。

{{ ansible_facts['distribution_version'] is version('12.04', '>=') }}

当在剧本或角色中使用version时,不要像FAQ

中描述的那样使用{{}}
vars:
    my_version: 1.2.3
tasks:
    - debug:
        msg: "my_version is higher than 1.0.0"
      when: my_version is version('1.0.0', '>')

查看Ansible Doc获取更多信息

你想过用shell模块代替吗?例如:

   - name: Get Kernel version
     shell: uname -r | egrep '^[0-9]*.[0-9]*' -o
     register: kernel_shell_output
   - debug: msg="{{ kernel_shell_output.stdout}}"
   - name: Add cstate and reboot bios if kernel is 4.8
     shell: echo "do what yo need to do"
     when: kernel_shell_output.stdout == "4.8"

相关内容

  • 没有找到相关文章

最新更新