有些時候,我們需要進行一些條件判斷才決定是否執行某個操作,在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