【问题标题】:How to strip extra characters from ansible_kernel如何从 ansible_kernel 中去除多余的字符
【发布时间】:2021-04-02 06:15:58
【问题描述】:

我正在尝试找到一种方法来去除与 ansible_kernel 变量相关的字符。截至目前,它输出如下内容:

3.10.0-1127.18.2.el7.x86_64

我只需要前 4 个字符 (3.10),因为我正在寻找为匹配特定值的内核版本编写条件任务。

我尝试按照此处的示例进行操作,但是我的输出只是一个 hello world:

How to compare kernel (or other) version numbers in Ansible

这是我的简单代码:

 - name: check kernel
   hosts: all
   gather_facts: yes
   vars:
      kernel_version: "{{ansible_kernel}}"
  
   tasks:
    
   - debug:
      var: kernel_version
    
   - set_fact: release="{{ kernel_version }}"
 
   - debug:
      var: release
    
   - debug: 
      msg:"Version is {{'release'[:5]}}" //also tried with release.stdout but I get an error

游戏输出:

ASK [debug] *******************************************************************
ok: [server] => {
    "kernel_version": "3.10.0-1127.18.2.el7.x86_64"
}
TASK [set_fact] ****************************************************************
ok: [server]
TASK [debug] *******************************************************************
ok: [server] => {
    "release": "3.10.0-1127.18.2.el7.x86_64"
}
TASK [debug] *******************************************************************
ok: [server] => {
    "msg": "Hello world!"

【问题讨论】:

    标签: variables ansible yaml conditional-statements


    【解决方案1】:

    使用拆分。例如,用点分割版本,选择前两个元素,然后再次加入

        - set_fact:
            ver: "{{ kernel_version.split('.')[:2]|join('.') }}"
    

    给予

      ver: '3.10'
    

    用破折号'-'分割并取第一个元素

        - set_fact:
            ver: "{{ kernel_version.split('-')|first }}"
    

    提供完整版

      ver: 3.10.0
    

    使用Comparing versions 测试版本。例如

        - debug:
            msg: Version higher than 3.0.0
          when: ver is version('3.0.0', '>')
        - debug:
            msg: Version lower than 3.0.0
          when: ver is version('3.0.0', '<')
    

    TASK [debug] ****
    ok: [localhost] =>
      msg: Version higher than 3.0.0
    
    TASK [debug] ****
    skipping: [localhost]
    

    【讨论】:

    • 哇!我会在新的一年里试试这个,然后回复你把它标记为正确答案!!
    • 决定现在试试这个。像魅力一样工作!!!!谢谢。
    【解决方案2】:

    您可以这样做。试试:

     - name: check kernel
       hosts: localhost
       gather_facts: yes  
       tasks:
         - debug:
             msg: "Stripped version {{ ansible_kernel[0:4] }}"
         - debug:
             msg: "The version is greater 0.2: {{ ansible_kernel is version_compare('0.2', operator='gt') }}"
         - debug:
             msg: "The version is smaller 0.2: {{ ansible_kernel is version_compare('0.2', operator='lt') }}"
    

    第一个演示了如何获取前 4 个字符。不过,它不适合您的目的(3.1.4 版本怎么样 -> 会产生 3.1.

    您应该选择version_compare(参见其他示例)。从 ansible 2.9 开始,这是正确的语法

    【讨论】:

    • 感谢您的加入。我也会试试这个,只是为了好玩。
    • 如果它解决了您的问题,请不要忘记接受(绿色复选标记)问题
    猜你喜欢
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多