Ansible 小手冊(cè)系列 十七(特性模塊)

異步操作和輪詢(xún)


---
# Requires ansible 1.8+
- name: 'YUM - fire and forget task'
  yum: name=docker-io state=installed
  async: 1000
  poll: 0
  register: yum_sleeper

- name: 'YUM - check on fire and forget task'
  async_status: jid={{ yum_sleeper.ansible_job_id }}
  register: job_result
  until: job_result.finished
  retries: 30
  • async: 1000 開(kāi)啟異步加載模式煤杀,超時(shí)時(shí)間1000秒眷蜈。沒(méi)有異步時(shí)間限制的默認(rèn)值。 如果省略“async”關(guān)鍵字沈自,任務(wù)將同步運(yùn)行酌儒。
  • poll: 0 輪詢(xún)時(shí)間0秒,直接跳過(guò)枯途,執(zhí)行下面的任務(wù)忌怎。默認(rèn)輪詢(xún)值為10秒。

檢查模式


在檢查模式狀態(tài)下酪夷,是不會(huì)在遠(yuǎn)程系統(tǒng)上做出任何改變的榴啸。

ansible-playbook foo.yml --check

忽略錯(cuò)誤


ignore_errors 模塊可以在任務(wù)執(zhí)行錯(cuò)誤時(shí),忽略錯(cuò)誤并繼續(xù)執(zhí)行任務(wù)捶索。

  tasks:
  - command: /bin/false
    ignore_errors: true
  - debug: msg="false"

滾動(dòng)執(zhí)行


- name: test play
  hosts: webservers
  serial: 3

在上面的例子中插掂,如果我們有100個(gè)主機(jī),組“webservers”中的3個(gè)主機(jī)將完成playbook腥例,然后再移動(dòng)到接下來(lái)的3個(gè)主機(jī)辅甥。

還可以使用百分比

  serial: "30%"

指定最大失敗數(shù)目


默認(rèn)情況下,只要組中有尚未失敗的主機(jī)燎竖,Ansible將繼續(xù)執(zhí)行操作璃弄。 在一些情況下,例如利用上述滾動(dòng)更新构回,可能希望在達(dá)到失敗的特定閾值時(shí)中止任務(wù)夏块。

- hosts: webservers
  max_fail_percentage: 30
  serial: 10

委托facts


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

以上將為dbservers組中的機(jī)器收集facts,并將facts分配給這些機(jī)器纤掸,而不是app_servers脐供。 這樣您可以查找hostvars ['dbhost1'] ['default_ipv4_addresses'] [0],即使dbserver不是play的一部分借跪,或者使用-limit省略政己。

任務(wù)只運(yùn)行一次


---
  tasks:
    - command: /opt/application/upgrade_db.py
      run_once: true

有錯(cuò)誤時(shí)立即中斷ansbile


---
- hosts: web
  any_errors_fatal: True

設(shè)置環(huán)境變量


  tasks:
    - apt: name=cobbler state=installed
      environment:
        http_proxy: http://proxy.example.com:8080
    PATH: /var/local/nvm/versions/node/v4.2.1/bin:{{ ansible_env.PATH }}

也可以在play級(jí)別使用

- hosts: testhost
  roles:
     - php
     - nginx
  environment:
    http_proxy: http://proxy.example.com:8080

即使任務(wù)失敗,handlers也執(zhí)行


以下3中方法均可使用
? 命令行加上 --force-handlers 參數(shù)
? 配置文件加上 force_handlers = True
? playbook里設(shè)置 force_handlers: True

Prompts: 運(yùn)行時(shí)掏愁,提示輸入內(nèi)容


- hosts: test
  gather_facts: no
  vars_prompt:
    - name: "name"
      prompt: "what is your name?"
      default: "user"
      private: yes
       confirm: yes
  tasks:
  - debug: msg={{ name }}
  • name: 定義變量名稱(chēng)歇由,即輸入的內(nèi)容賦值給此變量
  • prompt:輸入得提示信息
  • default: 輸入的默認(rèn)值卵牍,沒(méi)有輸入任何內(nèi)容的時(shí)候,把此值賦值給變量
  • private:是否隱藏輸入得內(nèi)容
  • confirm: 是否要再次確認(rèn)輸入

加密輸入的內(nèi)容


依賴(lài)Passlib包

- hosts: test
  gather_facts: no
  vars_prompt:
    - name: "pass"
      prompt: "Enter password"
      private: yes
      encrypt: "sha512_crypt"
      confirm: yes
      salt_size: 7
  tasks:
  - debug: msg={{ pass }}

可支持以下加密類(lèi)型
? des_crypt - DES Crypt
? bsdi_crypt - BSDi Crypt
? bigcrypt - BigCrypt
? crypt16 - Crypt16
? md5_crypt - MD5 Crypt
? bcrypt - BCrypt
? sha1_crypt - SHA-1 Crypt
? sun_md5_crypt - Sun MD5 Crypt
? sha256_crypt - SHA-256 Crypt
? sha512_crypt - SHA-512 Crypt
? apr_md5_crypt - Apache’s MD5-Crypt variant
? phpass - PHPass’ Portable Hash
? pbkdf2_digest - Generic PBKDF2 Hashes
? cta_pbkdf2_sha1 - Cryptacular’s PBKDF2 hash
? dlitz_pbkdf2_sha1 - Dwayne Litzenberger’s PBKDF2 hash
? scram - SCRAM Hash
? bsd_nthash - FreeBSD’s MCF-compatible nthash encoding

標(biāo)記 Tags


標(biāo)記一個(gè)任務(wù)

tasks:
    - yum: name={{ item }} state=installed
      with_items:
         - httpd
         - memcached
      tags:
         - packages
    - template: src=templates/src.j2 dest=/etc/foo.conf
      tags:
         - configuration

標(biāo)記playbook

- hosts: all
  tags:
    - bar
  tasks:
    ...

- hosts: all
  tags: ['foo']
  tasks:
    ...

標(biāo)記roles

roles:
  - { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }

標(biāo)記包含

- include: foo.yml
  tags: [web,foo]

始終運(yùn)行標(biāo)記的任務(wù)

tasks:
  - debug: msg="Always runs"
    tags:
      - always

還有另外3個(gè)特殊關(guān)鍵字用于標(biāo)簽沦泌,'tagged'糊昙,'untagged'和'all',它們分別是僅運(yùn)行已標(biāo)記谢谦,只有未標(biāo)記和所有任務(wù)释牺。

默認(rèn)情況下ansible運(yùn)行就像指定了'-tags all'。運(yùn)行playbook中的未標(biāo)記任務(wù) -tags untagged

顯示playbook中的所有標(biāo)記任務(wù)

ansible-playbook example.yml --list-tags

執(zhí)行所有標(biāo)記名稱(chēng)為packages的任務(wù)

ansible-playbook example.yml --tags packages

跳過(guò)所有標(biāo)記名稱(chēng)為notification的任務(wù)

ansible-playbook example.yml --skip-tags "notification"

wait_for


等待端口可用,才能執(zhí)行任務(wù)

- wait_for: port=8000 delay=10

等待直到鎖定文件被刪除

wait_for: path=/var/lock/file.lock state=absent

更多文章請(qǐng)看 Ansible 專(zhuān)題文章總覽

最后編輯于
?著作權(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)店門(mén)憔古,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)遮怜,“玉大人,你說(shuō)我怎么就攤上這事鸿市【饬海” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵焰情,是天一觀的道長(zhǎng)陌凳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)内舟,這世上最難降的妖魔是什么合敦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮验游,結(jié)果婚禮上充岛,老公的妹妹穿的比我還像新娘。我一直安慰自己耕蝉,他們只是感情好崔梗,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著垒在,像睡著了一般炒俱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天权悟,我揣著相機(jī)與錄音,去河邊找鬼推盛。 笑死峦阁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的耘成。 我是一名探鬼主播榔昔,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瘪菌!你這毒婦竟也來(lái)了撒会?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤师妙,失蹤者是張志新(化名)和其女友劉穎诵肛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(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
  • 文/蒙蒙 一趋箩、第九天 我趴在偏房一處隱蔽的房頂上張望赃额。 院中可真熱鬧,春花似錦叫确、人聲如沸跳芳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)飞盆。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吓歇,已是汗流浹背孽水。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 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)容