有一些模塊,例如copy這個模塊有一些機(jī)制能跳過本次模塊的運(yùn)行.其實(shí)我們也可以使用自己的條件語句去配置跳過模塊,這樣方便你服務(wù)能夠選擇使用不同的包管理(apt,yum)和不同的文件系統(tǒng).并且你還可以使用set_fact這個模塊做成更多的差異配置
你能夠使用when這個關(guān)鍵字去達(dá)到跳過本次模塊運(yùn)行的效果,when關(guān)鍵字后面跟著的是python的表達(dá)式,在表達(dá)式中你能夠使用任何的變量或者fact,當(dāng)表達(dá)式的結(jié)果返回的是false,便會跳過本次的模塊
下面一段配置就說明了如何在debian和redhat系統(tǒng)中選擇apt還是yum包管理,并且如果不是以上兩個系統(tǒng),會用debug模塊把系統(tǒng)打印出來
---
- name: Install VIM
? hosts: all
? tasks:
? ? - name: Install VIM via yum
? ? ? yum: name=vim-enhanced state=installed
? ? ? when: ansible_os_family == "RedHat"
? ? - name: Install VIM via apt
? ? ? apt: name=vim state=installed
? ? ? when: ansible_os_family == "Debian"
? ? - name: Unexpected OS family
? ? ? debug: msg="OS Family {{ ansible_os_family }} is not supported" fail=yes
? ? ? when: not ansible_os_family == "RedHat" or ansible_os_family == "Debian"
條件語句還有一種用法,它還可以讓你當(dāng)達(dá)到一定的條件的時候暫停下來,等待你的輸入確認(rèn).一般情況下,當(dāng)ansible遭遇到error時,它會直接結(jié)束運(yùn)行.那其實(shí)你可以當(dāng)遭遇到不是預(yù)期的情況的時候給使用pause模塊,這樣可以讓用戶自己決定是否繼續(xù)運(yùn)行任務(wù)
name: pause for unexpected conditions
pause: prompt="Unexpected OS"
when: ansible_os_family != "RedHat"
下面一些情景建議你使用條件語句做跳過動作
job里面有不同操作系統(tǒng)的機(jī)器
提示用戶,然后再執(zhí)行操作請求
提高性能,避免運(yùn)行一個需要執(zhí)行一段時間模塊,而且你知道這個模塊不會返回changed