运行 仅限 SUSE 机器上的 Ansible 任务

Run Ansible task on SUSE machines only

我只想在特定的 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 }}"

不能那样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.