用於捕獲命令的輸出,將結果作為變數,方便結果在下面的除錯,呼叫。
## 將結果直接獲取
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...