29

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

我已经找到了ansible_kernel事实,但是有没有一种简单的方法可以将其与其他版本进行比较?我以为我可能会手动分解.'s 上的版本字符串并比较数字,但我什至找不到友好的过滤器来分解版本字符串,所以我很茫然。

4

4 回答 4

33

有一个测试

{{ ansible_distribution_version is version('12.04', '>=') }}

{{ sample_version_var is version('1.0', operator='lt', strict=True) }}
于 2016-09-30T06:24:47.623 回答
7

如果内核版本小于 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

**

于 2019-03-05T06:58:01.250 回答
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) }}
...
于 2020-12-23T17:27:38.687 回答
-4

你有没有想过用 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"
于 2016-09-29T21:22:15.107 回答