Ansible的委托、并發(fā)唧领、任務(wù)超時(shí)

異步和輪詢


Ansible 有時(shí)候要執(zhí)行等待時(shí)間很長(zhǎng)的操作, 這個(gè)操作可能要持續(xù)很長(zhǎng)時(shí)間, 設(shè)置超過(guò)ssh的timeout. 這時(shí)候你可以在step中指定async 和 poll 來(lái)實(shí)現(xiàn)異步操作

async 表示這個(gè)step的最長(zhǎng)等待時(shí)長(zhǎng), 如果設(shè)置為0, 表示一直等待下去直到動(dòng)作完成.

poll 表示檢查step操作結(jié)果的間隔時(shí)長(zhǎng).

例1:

---
- name: Test
  hosts: localhost
  tasks:
    - name: wair for
      shell: sleep 16
      async: 10
      poll: 2

結(jié)果:
TASK: [wair for] ************************************************************** 
ok: [localhost]
<job 207388424975.101038> polling, 8s remaining
ok: [localhost]
<job 207388424975.101038> polling, 6s remaining
ok: [localhost]
<job 207388424975.101038> polling, 4s remaining
ok: [localhost]
<job 207388424975.101038> polling, 2s remaining
ok: [localhost]
<job 207388424975.101038> polling, 0s remaining
<job 207388424975.101038> FAILED on localhost

這個(gè)step失敗, 因?yàn)椴僮鲿r(shí)間超過(guò)了最大等待時(shí)長(zhǎng)

例2:

---
- name: Test
  hosts: localhost
  tasks:
    - name: wair for
      shell: sleep 16
      async: 10
      poll: 0

結(jié)果:
TASK: [wair for] ************************************************************** 
<job 621720484791.102116> finished on localhost

PLAY RECAP ********************************************************************

poll 設(shè)置為0, 表示不用等待執(zhí)行結(jié)果, 該step執(zhí)行成功

例3:

---
- name: Test
  hosts: localhost
  tasks:
    - name: wair for
      shell: sleep 16
      async: 0
      poll: 10

結(jié)果:
# time ansible-playbook xiama.yml 
TASK: [wair for] ************************************************************** 
changed: [localhost]

PLAY RECAP ******************************************************************** 
localhost                  : ok=2    changed=1    unreachable=0    failed=0   


real    0m16.693s

async設(shè)置為0, 會(huì)一直等待直到該操作完成.

Play執(zhí)行時(shí)的并發(fā)限制


一般情況下, ansible會(huì)同時(shí)在所有服務(wù)器上執(zhí)行用戶定義的操作, 但是用戶可以通過(guò)serial參數(shù)來(lái)定義同時(shí)可以在多少太機(jī)器上執(zhí)行操作.

- name: test play
  hosts: webservers
  serial: 3

webservers組中的3臺(tái)機(jī)器完全完成play后, 其他3臺(tái)機(jī)器才會(huì)開始執(zhí)行

serial參數(shù)在ansible-1.8以后就開始支持百分比

最大失敗百分比

默認(rèn)情況下, 只要group中還有server沒(méi)有失敗, ansible就是繼續(xù)執(zhí)行tasks. 實(shí)際上, 用戶可以通過(guò)"max_fail_percentage" 來(lái)定義, 只要超過(guò)max_fail_percentage臺(tái)的server失敗, ansible 就可以中止tasks的執(zhí)行

- hosts: webservers
  max_fail_percentage: 30
  serial: 10

ps: 實(shí)際失敗機(jī)器必須大于這個(gè)百分比時(shí), tasks才會(huì)被中止. 等于時(shí)是不會(huì)中止tasks的


委托


通過(guò)"delegate_to", 用戶可以把某一個(gè)任務(wù)放在委托的機(jī)器上執(zhí)行.

- hosts: webservers
  serial: 5

  tasks:

  - name: take out of load balancer pool
    command: /usr/bin/take_out_of_pool {{ inventory_hostname }}
    delegate_to: 127.0.0.1

上面的task會(huì)在跑ansible的機(jī)器上執(zhí)行, "delegate_to: 127.0.0.1" 可以用local_action來(lái)代替

  tasks:

  - name: take out of load balancer pool
    local_action: command /usr/bin/take_out_of_pool {{ inventory_hostname }}

委托者的facts

默認(rèn)情況下, 委托任務(wù)的facts是inventory_hostname中主機(jī)的facts, 而不是被委托機(jī)器的facts. 在ansible 2.0 中, 設(shè)置delegate_facts為true可以讓任務(wù)去收集被委托機(jī)器的facts.

- hosts: app_servers
  tasks:
    - name: gather facts from db servers
      setup:
      delegate_to: "{{item}}"
      delegate_facts: True
      with_items: "{{groups[‘dbservers‘}}"

該例子會(huì)收集dbservers的facts并分配給這些機(jī)器, 而不會(huì)去收集app_servers的facts

RUN ONCE

通過(guò)run_once: true來(lái)指定該task只能在某一臺(tái)機(jī)器上執(zhí)行一次. 可以和delegate_to 結(jié)合使用

- command: /opt/application/upgrade_db.py
  run_once: true
  delegate_to: web01.example.org

指定在"web01.example.org"上執(zhí)行這

如果沒(méi)有delegate_to, 那么這個(gè)task會(huì)在第一臺(tái)機(jī)器上執(zhí)行

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藻雌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子斩个,更是在濱河造成了極大的恐慌胯杭,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件受啥,死亡現(xiàn)場(chǎng)離奇詭異做个,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)滚局,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門居暖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人藤肢,你說(shuō)我怎么就攤上這事太闺。” “怎么了嘁圈?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵省骂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我最住,道長(zhǎng)钞澳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任涨缚,我火速辦了婚禮轧粟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己逃延,他們只是感情好览妖,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布轧拄。 她就那樣靜靜地躺著揽祥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪檩电。 梳的紋絲不亂的頭發(fā)上拄丰,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音俐末,去河邊找鬼料按。 笑死,一個(gè)胖子當(dāng)著我的面吹牛卓箫,可吹牛的內(nèi)容都是我干的载矿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼烹卒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼闷盔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起旅急,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逢勾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后藐吮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溺拱,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年谣辞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迫摔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泥从,死狀恐怖攒菠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歉闰,我是刑警寧澤辖众,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站和敬,受9級(jí)特大地震影響凹炸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昼弟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一啤它、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦变骡、人聲如沸离赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)渊胸。三九已至,卻和暖如春台妆,著一層夾襖步出監(jiān)牢的瞬間翎猛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工接剩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留切厘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓懊缺,卻偏偏與公主長(zhǎng)得像疫稿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹃两,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容