【问题标题】:Run Ansible task on SUSE machines only仅在 SUSE 机器上运行 Ansible 任务
【发布时间】:2020-09-23 22:57:09
【问题描述】:

我只想在特定的 SUSE 版本上执行我的 Ansible 任务。但是这个任务会针对所有 Linux OS 风格执行。这不是预期的。有人可以帮我弄这个吗?为什么 when 条件不起作用?我做错了什么?

代码:

# Action 146: addlink ld-lsb.so.3->ld-2.11.1.so in /lib on sles11.x,12.x for lmutil in cct2000739233
  - name: Addlink ld-lsb.so.3->ld-2.11.1.so in /lib on sles11.x,12.x for lmutil
    shell: "ls ld-*.so|grep -v lsb|head -n 1"
    args:
      chdir: /lib
    register: ldso

  - stat:
      path: /lib64/ld-lsb-x86-64.so.3
    register: lib64_result

  - stat:
      path: /lib/ld-lsb.so.3
    register: lib_result

  - block:
      - file:
          src: "/lib/{{ ldso.stdout }}"
          dest: /lib/ld-lsb.so.3
          state: link
          force: true
      - file:
          src: /lib64/ld-linux-x86-64.so.2
          dest: /lib64/ld-lsb-x86-64.so.3
          state: link
          force: true
    when:
      # Check the OS level. Make sure it runs only on SLES-11 SP4,SLES-12SP0/1/2/3
      - ansible_distribution == 'Suse'
      - ansible_distribution_major_version == "11"
      - ansible_distribution_release == "4"
      - ansible_distribution_version == "11.4"

      - ansible_distribution == 'SLES'
      - ansible_distribution_major_version == "12"
      - ansible_distribution_release == "0" or "1" or "2" or "3"
      - ansible_distribution_version == "12.0" or "12.1" or "12.2" or "12.3"

      - not lib64_result.stat.exists|bool or not lib_result.stat.exists|bool
      - ldso.stdout != ''

  - debug:
      msg: "{{ ldso.stdout }}"

【问题讨论】:

    标签: ansible suse


    【解决方案1】:

    不能那样做or。必须是这样的:

      - ansible_distribution_release == "0" or ansible_distribution_release == "1" or ansible_distribution_release == "2" or ansible_distribution_release == "3"
      - ansible_distribution_version == "12.0" or ansible_distribution_version == "12.1" or ansible_distribution_version == "12.2" or ansible_distribution_version == "12.3"
    

    按照你的方式,ansible_distribution_release == "0" or "1"ansible_distribution_release == "0" 计算结果为 false,这很好,但随后 "1" 计算结果为 truefalse or true 然后计算为 true

    【讨论】:

      猜你喜欢
      • 2017-02-23
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      相关资源
      最近更新 更多