Playbook中條件的使用

2021-10-04 22:16:07 字數 3768 閱讀 3434

用於捕獲命令的輸出,將結果作為變數,方便結果在下面的除錯,呼叫。

## 將結果直接獲取

1 ---

2 - name:

3 tasks:

4 - name: run script

5 shell: /usr/local/bin/user.sh

6 register: command_result ##命令結果存入command_result

7 - name: debug

8 debug:

9 msg: command_result.stdout ##檢視命令中的標準輸出

只有當when的條件為真時,被when標記的任務才可執行

##when條件為真時,才可執行 

when的判定可以和變數的判定進行組合,只需要條件為真即可,例如:when  *** is defined(當***變數存在時,執行)判斷方式

含義結果

==等於

<

小大於<=

小於等於

>=

大於等於

!=不等於

*** is defined

變數存在

*** is not defined

變數不存在

true 1 yes

布林值 真

false 0 no

布林值 假

or邏輯或

and邏輯於

a in b

a存在且在b中

這裡條件的使用和c語言裡面的基本一致,不做過多贅述。

結合when的例項

##結合when做判定

10 when: ##當系統為redhat且版本為8 或者 系統為centos 且版本為7時執行

11 ( ansible_distribution == "redhat" and

12 ansible_distribution_major_version == "8" ) or

13 ( ansibel_distribution == "centos" and

14 ansible_distribution_,ajor_version == "7")

忽略失敗的任務繼續執行下面的任務

## k8s不存在yum倉庫,安裝時會報錯 

1 ---

2 - name: ignore_errros

3 hosts: all

4 tasks:

5 - name: install package

6 yum:

7 name: k8s

8 state: latest

9 ignore_errors: yes

執行結果:

通常任務失敗,play中止則play中收到的之前任務通知的處理程式將不會執行,為了使之前的通知可以執行

## 強制執行觸發器

1 ---

2 - name: force

3 hosts: all

4 force_handlers: yes

5 tasks:

6 - name: always notify

7 command: /bin/true

8 notify: restart apache

9 10 - name: fail task ##該任務會失敗,yum中不存在k8s的包

結果分析:

在一些特殊情況下,需要指定該任務失敗,但要求該任務執行(block塊中會出現要求block和rescue均執行)

##指定任務失敗

tasks:

- name: run script

shell: /usr/local/bin/user.sh

register: command_result

failed_when: "'failure' is command_result.stdout" ##當輸出結果有failure時,任務失敗

當處理器需要執行時,changed必須有結果,我們可以通過測試觸發器,進行測試。

#設定changed_when為false不改變

1 ---

2 - name: get time

3 hosts: all

4 tasks:

5 - name: get time

6 shell: date

7 changed_when: false

8 notify: check time

9 10 handlers:

11 - name: check time

12 shell: date

13

測試結果:

注釋掉changed_when,再測試

使用Ansible中的playbook

playbook 是由乙個或多個play 組成的列表 playbook 檔案使用yaml來寫的 簡介 是一種表達資料序列的格式,類似xml 特點 可讀性好 和指令碼語言互動性號 易於實現 適用程式執行流梳理方式 可擴充套件性強 在檔案中用 開始 在檔案中用 結尾 次行一般書寫檔案內容 縮排嚴格 大小...

Ansible中playbook的變數

先看看debug模組的使用 msg 輸出除錯資訊 var 將某個任務執行的輸出作為變數傳給debug模組,debug模組將其列印輸出 verbosity debug的任務級別 1 在playbook中直接使用 hosts db vars vvv china tasks name test var d...

使用Playbook批量部署多台LAMP環境

1.安裝ansible yum install epel release y yum install ansible y playbook是乙個不同於使用ansible命令列執行方式的模式,功能更強大更靈活。playbooks使用步驟 1.1 在playbooks 中定義任務 name task d...