ansible——playbook conditions条件判断

有些时候,我们需要进行一些条件判断才决定是否执行某个操作,在playbook里面when语句帮我们解决了这个问题。

比如,如果节点的操作的系统为Debian那么就关机。

tasks:
  - name: "shut down Debian flavored systems"
    command: /sbin/shutdown -t now
    when: ansible_facts['os_family'] == "Debian"

当然还可以进行更加复杂的操作,and和or的逻辑判断。
如果系统是centos6或者是Debian7,那么就关机。

tasks:
  - name: "shut down CentOS 6 and Debian 7 systems"
    command: /sbin/shutdown -t now
    when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "6") or
          (ansible_facts['distribution'] == "Debian" and ansible_facts['distribution_major_version'] == "7")

如果同时需要多个条件,那么可以这样:

tasks:
  - name: "shut down CentOS 6 systems"
    command: /sbin/shutdown -t now
    when:
      - ansible_facts['distribution'] == "CentOS"
      - ansible_facts['distribution_major_version'] == "6"

其实等价于下面:

tasks:
  - name: "shut down CentOS 6 and Debian 7 systems"
    command: /sbin/shutdown -t now
    when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "6")

有时候你会得到一个变量,它是一个字符串,你可以对其进行数学运算:

tasks:
  - shell: echo "only on Red Hat 6, derivatives, and later"
    when: ansible_facts['os_family'] == "RedHat" and ansible_facts['lsb']['major_release']|int >= 6

你还可以根据变量值,来判断:
变量值:

vars:
  epic: true

判断:

tasks:
    - shell: echo "This certainly is epic!"
      when: epic

还可以循环:

tasks:
    - command: echo {{ item }}
      loop: [ 0, 2, 4, 6, 8, 10 ]
      when: item > 5

配合变量寄存器:

- name: test play
  hosts: all

  tasks:

      - shell: cat /etc/motd
        register: motd_contents

      - shell: echo "motd contains the word hi"
        when: motd_contents.stdout.find('hi') != -1

 

posted @ 2020-04-07 23:58  明王不动心  阅读(1085)  评论(0编辑  收藏  举报