Ansible Roles使用

一、Content Organization

推薦使用roles,roles是極好的。

1.1 目錄結(jié)構(gòu)

頂層目錄結(jié)構(gòu)應(yīng)當(dāng)包括下列文件和目錄:

production                # inventory file for production servers 關(guān)于生產(chǎn)環(huán)境服務(wù)器的清單文件
stage                     # inventory file for stage environment 關(guān)于 stage 環(huán)境的清單文件

group_vars/
   group1                 # here we assign variables to particular groups 這里我們給特定的組賦值
   group2                 # ""
host_vars/
   hostname1              # if systems need specific variables, put them here 如果系統(tǒng)需要特定的變量,把它們放置在這里.
   hostname2              # ""

library/                  # if any custom modules, put them here (optional) 如果有自定義的模塊,放在這里(可選)
filter_plugins/           # if any custom filter plugins, put them here (optional) 如果有自定義的過濾插件,放在這里(可選)

site.yml                  # master playbook 主 playbook
webservers.yml            # playbook for webserver tier Web 服務(wù)器的 playbook
dbservers.yml             # playbook for dbserver tier 數(shù)據(jù)庫服務(wù)器的 playbook

roles/
    common/               # this hierarchy represents a "role" 這里的結(jié)構(gòu)代表了一個(gè) "role"
        tasks/            #
            main.yml      #  <-- tasks file can include smaller files if warranted
        handlers/         #
            main.yml      #  <-- handlers file
        templates/        #  <-- files for use with the template resource
            ntp.conf.j2   #  <------- templates end in .j2
        files/            #
            bar.txt       #  <-- files for use with the copy resource
            foo.sh        #  <-- script files for use with the script resource
        vars/             #
            main.yml      #  <-- variables associated with this role
        defaults/         #
            main.yml      #  <-- default lower priority variables for this role
        meta/             #
            main.yml      #  <-- role dependencies

    webtier/              # same kind of structure as "common" was above, done for the webtier role
    monitoring/           # ""
    fooapp/               # ""

1.2 使用Role的劇本

---
# file: webservers.yml
- hosts: webservers
  roles:
    - common
    - webtier

1.3 Task and Handler Organization For A Role

接下來的示例任務(wù)文件展示了一個(gè) role 是如何工作的.我們這里的普通 role 僅僅用來配置 NTP,但是如果我們想的話,它可以做更多:

---
# file: roles/common/tasks/main.yml

- name: be sure ntp is installed
  yum: pkg=ntp state=installed
  tags: ntp

- name: be sure ntp is configured
  template: src=ntp.conf.j2 dest=/etc/ntp.conf
  notify:
    - restart ntpd
  tags: ntp

- name: be sure ntpd is running and enabled
  service: name=ntpd state=running enabled=yes
  tags: ntp

這是個(gè)處理文件樣例.作為一種審核,它只有當(dāng)特定的任務(wù)報(bào)告發(fā)生變化時(shí)會(huì)被觸發(fā),并在每個(gè) play 結(jié)束時(shí)運(yùn)行:

---
# file: roles/common/handlers/main.yml
- name: restart ntpd
  service: name=ntpd state=restarted

1.4 What This Organization Enables(Examples)

我們?cè)谇拔姆窒砹宋覀兓A(chǔ)的組織結(jié)構(gòu).
那這種結(jié)構(gòu)適用于何種應(yīng)用場(chǎng)景? 很多昌阿!若我想重新配置整個(gè)基礎(chǔ)設(shè)施,如此即可:
ansible-playbook -i production site.yml
那只重新配置所有的 NTP 呢?太容易了.:
ansible-playbook -i production site.yml --tags ntp
只重新配置我的 Web 服務(wù)器呢恳邀?:
ansible-playbook -i production webservers.yml
只重新配置我在波士頓的 Web服務(wù)器呢?:
ansible-playbook -i production webservers.yml --limit boston

二、深入探討

2.1 異步操作和輪詢

默認(rèn)情況下playbook中的任務(wù)執(zhí)行時(shí)會(huì)一直保持連接,直到該任務(wù)在每個(gè)節(jié)點(diǎn)都執(zhí)行完畢.有時(shí)這是不必要的,比如有些操作運(yùn)行時(shí)間比SSH超時(shí)時(shí)間還要長.
解決該問題最簡單的方式是一起執(zhí)行它們,然后輪詢直到任務(wù)執(zhí)行完畢.
你也可以對(duì)執(zhí)行時(shí)間非常長(有可能遭遇超時(shí))的操作使用異步模式.
為了異步啟動(dòng)一個(gè)任務(wù),可以指定其最大超時(shí)時(shí)間以及輪詢其狀態(tài)的頻率.如果你沒有為 poll 指定值,那么默認(rèn)的輪詢頻率是10秒鐘:

---

- hosts: all
  remote_user: root

  tasks:

  - name: simulate long running op (15 sec), wait for up to 45 sec, poll every 5 sec
    command: /bin/sleep 15
    async: 45
    poll: 5

注:async 并沒有默認(rèn)值,如果你沒有指定 async 關(guān)鍵字,那么任務(wù)會(huì)以同步的方式運(yùn)行,這是Ansible的默認(rèn)行為.

另外,如果你不需要等待任務(wù)執(zhí)行完畢,你可以指定 poll 值為0而啟用 “啟動(dòng)并忽略”

---

- hosts: all
  remote_user: root

  tasks:

  - name: simulate long running op, allow to run for 45 sec, fire and forget
    command: /bin/sleep 15
    async: 45
    poll: 0

注:對(duì)于要求排它鎖的操作,如果你需要在其之后對(duì)同一資源執(zhí)行其它任務(wù),那么你不應(yīng)該對(duì)該操作使用”啟動(dòng)并忽略”.比如yum事務(wù).

注:--forks 參數(shù)值過大會(huì)更快的觸發(fā)異步任務(wù).也會(huì)加快輪詢的效率.

當(dāng)你想對(duì) “啟動(dòng)并忽略” 做個(gè)變種,改為”啟動(dòng)并忽略,稍后再檢查”,你可以使用以下方式執(zhí)行任務(wù):

---
# 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: 值太小,可能會(huì)導(dǎo)致 “稍后檢查” 任務(wù)執(zhí)行失敗,因?yàn)?async_status:: 的臨時(shí)狀態(tài)文件還未被寫入信息,而”稍后檢查”任務(wù)就試圖讀取此文件.

2.2 Check Mode (“Dry Run”)

當(dāng)以 --check 參數(shù)來運(yùn)行 ansible-playbook 時(shí),將不會(huì)對(duì)遠(yuǎn)程的系統(tǒng)作出任何更改.相對(duì)的,任何帶有檢測(cè)功能的模塊(這幾乎包含了所有的主要核心模塊,但這不要求所有的模塊都需支持.) 只要支持 ‘檢測(cè)模式’ 將會(huì)報(bào)告它們會(huì)做出什么改變而不是直接進(jìn)行改變.其他不支持檢測(cè)模式的模塊將既不響應(yīng)也不提出相應(yīng)的報(bào)告.

檢測(cè)模式只是一種模擬.如果你的playbook是以先前命令的執(zhí)行結(jié)果作為條件的話,那它可能對(duì)你就沒有什么大用處了. 但是對(duì)于基于一次一節(jié)點(diǎn)的基礎(chǔ)配置管理的使用情形來說是很有用.
ansible-playbook foo.yml --check

2.3 Showing Differences with --diff

New in version 1.1: 對(duì) ansible-playbook 來說 --diff選項(xiàng)與 --check (詳情參下)配合使用效果奇佳,不過它也可以單獨(dú)使用.當(dāng)提供了相應(yīng)的標(biāo)識(shí)后,當(dāng)遠(yuǎn)程系統(tǒng)上任何模板文件的變化時(shí),ansible-playbook CLI 將會(huì)報(bào)告文件上任何文本的變化 (或者,如果使用了 --check 參數(shù),將報(bào)告會(huì)發(fā)生的變化.).因?yàn)?diff 特性會(huì)產(chǎn)生大量的輸出結(jié)果,所以它在一次檢測(cè)一個(gè)主機(jī)時(shí)使用為佳,如:
ansible-playbook foo.yml --check --diff --limit foo.example.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灶轰,一起剝皮案震驚了整個(gè)濱河市谣沸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笋颤,老刑警劉巖乳附,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伴澄,居然都是意外死亡赋除,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門非凌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來举农,“玉大人,你說我怎么就攤上這事敞嗡“湓悖” “怎么了航背?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棱貌。 經(jīng)常有香客問我玖媚,道長,這世上最難降的妖魔是什么婚脱? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任今魔,我火速辦了婚禮,結(jié)果婚禮上障贸,老公的妹妹穿的比我還像新娘错森。我一直安慰自己,他們只是感情好惹想,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布问词。 她就那樣靜靜地躺著,像睡著了一般嘀粱。 火紅的嫁衣襯著肌膚如雪激挪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天锋叨,我揣著相機(jī)與錄音垄分,去河邊找鬼。 笑死娃磺,一個(gè)胖子當(dāng)著我的面吹牛薄湿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偷卧,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼豺瘤,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了听诸?” 一聲冷哼從身側(cè)響起坐求,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晌梨,沒想到半個(gè)月后桥嗤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仔蝌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年泛领,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敛惊。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渊鞋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情篓像,我是刑警寧澤动知,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站员辩,受9級(jí)特大地震影響盒粮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奠滑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一丹皱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宋税,春花似錦摊崭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乏屯,卻和暖如春根时,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辰晕。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工蛤迎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人含友。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓替裆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親窘问。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辆童,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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