Ansible-----條件判斷與錯誤處理


when

在ansible中,條件判斷的關鍵詞是when

---
- hosts: all
  remote_user: root
  tasks:
  - debug:
      msg: "System release is centos"
    when: ansible_distribution == "CentOS"

ansible_distribution就是facts信息中的一個key,之前如果我們需要引用變量一般是通過"{{ key }}"這樣的方式獲取,但是在when關鍵詞中,不需要添加"{{  }}"。

---
- hosts: all
  remote_user: root
  gather_facts: no
  tasks:
  - debug:
      msg: "{{ item }}"
    with_items:
    - 1
    - 2
    - 3
    when: item > 1

下面是一個邏輯運算實例

---
- hosts: all
  remote_user: root
  tasks:
  - debug:
      msg: "System release is centos7"
    when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"

邏輯與除了and 也可以使用列表的方式表示。

---
- hosts: all
  remote_user: root
  tasks:
  - debug:
      msg: "System release is centos7"
    when:
    - ansible_distribution == "CentOS"
    - ansible_distribution_major_version == "7"

  這個列表中的每一項都是一個條件,當所有條件同時成立時,任務才會執行。

fail模塊

想要playbook按照我們的意願中斷任務,可以借助fail模塊。

在任務沒有設置ignore_errors:true情況下,如果有任務執行失敗,playbook會自動停止執行,當fail模塊執行后,playbook會認為任務執行失敗了,會主動中止任務。

---
- hosts: all
  remote_user: root
  tasks:
  - debug:
      msg: "1"
  - debug:
      msg: "2"
  - fail:
  - debug:
      msg: "3"
  - debug:
      msg: "4"
 

我們也可以通過fail模塊自帶的msg,自定義報錯信息,

---
- hosts: test70
  remote_user: root
  tasks:
  - debug:
      msg: "1"
  - fail:
      msg: "Interrupt running playbook"
  - debug:
      msg: "2"

fail+when

 fail模塊通常與when模塊結合,如果中斷劇本的條件成立,則執行fail模塊,中斷劇本。

---
- hosts: all
  remote_user: root
  tasks:
  - shell: "echo 'This is a string for testing--error'"
    register: return_value
  - fail:
      msg: "Conditions established,Interrupt running playbook"
    when: "'error' in return_value.stdout"
  - debug:
      msg: "I never execute,Because the playbook has stopped"

failed_when也可以完成類似的功能,當條件成立時將對應任務的狀態設置為失敗,中止劇本。

---
- hosts: all
  remote_user: root
  tasks:
  - debug:
      msg: "I execute normally"
  - shell: "echo 'This is a string for testing error'"
    register: return_value
    failed_when: ' "error" in return_value.stdout'
  - debug:
      msg: "I never execute,Because the playbook has stopped"

changed_when

failed_when關鍵詞的作用是在條件成立時將任務狀態改為失敗。

changed_when關鍵詞的作用是在條件成立時,將任務狀態改為changed。

---
- hosts: all
  remote_user: root
  tasks:
  - debug:
      msg: "test message"
    changed_when: 2 > 1

 當changed_when狀態被設置為false時,不管原任務狀態為啥,最終都會被設置為ok狀態

---
- hosts: all
  remote_user: root
  tasks:
  - shell: "ls /opt"
    changed_when: True

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM