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

时间:2016-09-29 20:51:54

标签: ansible ansible-2.x version-numbering

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

我找到了ansible_kernel值,但是有一种简单的方法可以将它与其他版本进行比较吗?我想我可能会在'' s&比较数字,但我甚至找不到一个友好的过滤器来爆炸版本字符串,所以我不知所措。

提前致谢。

Ť

4 个答案:

答案 0 :(得分:15)

它有一个test

{{ ansible_distribution_version | version_compare('12.04', '>=') }}

{{ sample_version_var | version_compare('1.0', operator='lt', strict=True) }}

答案 1 :(得分:5)

对于 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) }}
...

答案 2 :(得分:1)

  

如果内核版本小于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版本中,compare_compare重命名为版本

**

答案 3 :(得分:-2)

您是否考虑过使用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"