Ansible學(xué)習(xí)——組件之Playbook day8

playbook介紹

playbook是由一個(gè)或多個(gè)”play”組成的列表蓬蝶。play的主要功能在于將事先歸為一組的主機(jī)裝扮成事先通過ansible中的task定義好的角色糕档。從根本上來將藻雌,所謂的task無法是調(diào)用ansible的一個(gè)module。將多個(gè)play組織在一個(gè)playbook中曹货,即可以讓他們聯(lián)通起來按事先編排的機(jī)制同唱一臺大戲奖亚。

playbook-->play-->task-->module

role

Playbook是Ansible的配置,部署甘邀,編排語言琅攘。他們可以被描述為一個(gè)需要希望遠(yuǎn)程主機(jī)執(zhí)行命令的方案,或者一組IT程序運(yùn)行的命令集合松邪。
當(dāng)執(zhí)行一些簡單的改動時(shí)ansible命令是非常有用的坞琴,然而它真的作用在于它的腳本能力。當(dāng)對一臺機(jī)器做環(huán)境初始化的時(shí)候往往需要不止做一件事情逗抑,這時(shí)使用playbook會更加適合剧辐。通過playbook你可以一次在多臺機(jī)器執(zhí)行多個(gè)指令。通過這種預(yù)先設(shè)計(jì)的配置保持了機(jī)器的配置統(tǒng)一邮府,并很簡單的執(zhí)行日常任務(wù)荧关。
Playbook還開創(chuàng)了很多特性,它可以允許你傳輸某個(gè)命令的狀態(tài)到后面的指令褂傀,如你可以從一臺機(jī)器的文件中抓取內(nèi)容并附為變量忍啤,然后在另一臺機(jī)器中使用,這使得你可以實(shí)現(xiàn)一些復(fù)雜的部署機(jī)制仙辟,這是ansible命令無法實(shí)現(xiàn)的同波。
在如右的連接中: https://github.com/ansible/ansible-examples,有一些整套的playbooks叠国,它們闡明了上述的這些技巧未檩。

YAML介紹
Ansible使用標(biāo)準(zhǔn)的YAML解析器,使用YAML文件語法即可書寫playbook粟焊。
YAML是一個(gè)可讀性高的用來表達(dá)資料序列的格式冤狡,YAML參考了其他多種語言,包括:XML吆玖、C語言筒溃、Python、Perl以及電子郵件格式RFC2822等沾乘。Clark Evans在2001首次發(fā)表了這種語言怜奖。
YAML Ain’t Makup Language仇参,即YAML不是XML霹陡。不過角钩,在開發(fā)這種語言時(shí)蠢甲,YAML的意思是:Yet Another Makrup Language(仍是一種標(biāo)記語言),其特性:YAML的可讀性好滥崩、YAML和腳本的交互性好岖圈、YAML有一個(gè)一致的信息模型、YAML易于實(shí)現(xiàn)钙皮、 YAML可以基于流來處理蜂科、YAML表達(dá)能力強(qiáng),擴(kuò)展性好短条。更多的內(nèi)容及規(guī)范參見www.yaml.org导匣。

GNU GNU IS NOT UNIX
LINUX linus's mix

核心元素:
Playbooks
Variables #變量元素,可傳遞給Tasks/Templates使用;
Tasks #任務(wù)元素,由模塊定義的操作的列表,即調(diào)用模塊完成任務(wù);
Templates #模板元素,使用了模板語法的文本文件茸时,可根據(jù)變量動態(tài)生成配置文件;
Handlers #處理器元素,通常指在某事件滿足時(shí)觸發(fā)的操作;
Roles #角色元素

playbook的基礎(chǔ)組件:
name
定義playbook或者task的名稱

hosts
playbook中的每一個(gè)paly的目的都是為了讓某個(gè)或某些以某個(gè)指定用戶的身份執(zhí)行任務(wù)贡定。hosts用于指定要執(zhí)行指定任務(wù)的主機(jī),其可以是一個(gè)或多個(gè)由冒號分割主機(jī)組可都。與命令模式下的ansible匹配規(guī)則一樣

user
remote_user則用于指定遠(yuǎn)程主機(jī)上的執(zhí)行任務(wù)的用戶缓待,也可以使用user

tasks
任務(wù)列表
play的主體部分是task list. task list中的各任務(wù)按次序逐個(gè)在hosts中指定的所有主機(jī)上執(zhí)行,即在所有主機(jī)上完成第一個(gè)任務(wù)后再開始第二個(gè)渠牲。

vars
定義變量

vars_files
定義變量文件

notify
任務(wù)執(zhí)行結(jié)果如果是發(fā)生更改了的則觸發(fā)定義在handler的任務(wù)執(zhí)行

handlers
用于當(dāng)前關(guān)注的資源發(fā)生變化時(shí)采取一定指定的操作

include
能包含的包括task旋炒,handler和playbook
可以在include的時(shí)候傳遞變量

示例1:簡單playbook
文檔以---開頭,沒有也可以
[root@master ~]# cd /etc/ansible/
[root@master ansible]# vim test.yml //固定后綴為yml


  • hosts: all //特別注意-后面的空格 指定執(zhí)行本play的主機(jī)組
    user: root //指定運(yùn)行本play的遠(yuǎn)程主機(jī)用戶
    tasks:
  • name: playbook_test //任務(wù)描述
    shell: touch /tmp/playbook.txt //shell是ansible模塊
    tags: suibian //這是一個(gè)任務(wù)標(biāo)記,可用來單獨(dú)執(zhí)行此任務(wù)

參數(shù)解釋:
hosts參數(shù)指定了對哪些主機(jī)進(jìn)行操作嘱兼;
user參數(shù)指定了使用什么用戶登錄遠(yuǎn)程主機(jī)操作国葬;
tasks指定了一個(gè)任務(wù),其下面的name參數(shù)同樣是對任務(wù)的描述芹壕,在執(zhí)行過程中會打印出來汇四。
tags:給指定的任務(wù)定義一個(gè)調(diào)用標(biāo)識,形式如下

  • name: NAME
    module: arguments
    tags: TAG_ID

語法檢測
[root@ansible ansible]# ansible-playbook --syntax-check test.yml
playbook: test.yml

測試運(yùn)行
[root@master ansible]#ansible-playbook -C /path/to/playbook.yaml
可以使用如下參數(shù):
--list-hosts
--list-tasks
--list-tags

運(yùn)行Playbook:
[root@master ansible]# ansible-playbook test.yml

只運(yùn)行指定標(biāo)記的任務(wù):-t tags
[root@ansible ansible]# ansible-playbook -t 標(biāo)記名稱 test.yml

跳過某一個(gè)被標(biāo)記的任務(wù):--skip-tags=SKIP_TAGS
[root@ansible ansible]# ansible-playbook --skip-tags=標(biāo)記名稱 test.yml

從某一個(gè)任務(wù)開始往下運(yùn)行:--start-at-task 任務(wù)名稱
[root@ansible ansible]# ansible-playbook --start-at-task "start httpd service" test.yml

示例2.每個(gè)playbook可以有多個(gè)play
[root@ansible ansible]# cat test.yml

  • hosts: all //play1
    remote_user: root
    tasks:

  • name: install a group
    group: name=mygrp system=true

  • name: install a user
    user: name=user1 group=mygrp system=true

  • hosts: webservers //play2
    remote_user: root
    tasks:

  • name: install httpd package
    yum: name=httpd

  • name: start httpd service
    service: name=httpd state=started

示例3:使用變量
[root@ansible ansible]# cat create_user.yml

  • name: create_user //劇本描述信息
    hosts: web1
    user: root
    gather_facts: false
    vars:
  • user: "msiyuetian"
    tasks:
  • name: create user
    user: name="{{ user }}"

參數(shù)解釋:
name參數(shù)
對該playbook實(shí)現(xiàn)的功能做一個(gè)概述踢涌,后面執(zhí)行過程中通孽,會打印 name變量的值 ,可以省略睁壁;

gather_facts參數(shù)
指定了在以下任務(wù)部分執(zhí)行前背苦,是否先執(zhí)行setup模塊獲取主機(jī)相關(guān)信息,這在后面的task會使用
到setup獲取的信息時(shí)用到潘明;
默認(rèn)值為true行剂,改成false之后在執(zhí)行過程中就看不到以下信息:
TASK [Gathering Facts]


ok: [web1]
ok: [web3]
ok: [web2]
ok: [192.168.245.135]

vars參數(shù)
指定了變量,這里指字一個(gè)user變量钳降,其值為test 厚宰,需要注意的是,變量值一定要用引號引住铲觉;

user
指定了調(diào)用user模塊澈蝙,name是user模塊里的一個(gè)參數(shù),而增加的用戶名字調(diào)用了上面user變量的值撵幽。

運(yùn)行playbook:
[root@master ansible]# ansible-playbook create_user.yml

示例4:條件執(zhí)行
[root@master ansible]# vim when.yml

  • hosts: web1
    user: root
    gather_facts: True
    tasks:
    • name: use when
      shell: touch /tmp/when.txt
      when: ansible_hostname == "web1"

[root@ansible ansible]# cat when.yml

  • hosts: web1
    user: root
    gather_facts: True
    tasks:
  • name: use when
    shell: touch /tmp/when.txt
    when: ansible_all_ipv4_addresses[0] == "192.168.245.133"

只有當(dāng)參數(shù)ansible_all_ipv4_addresses[0]為 192.168.245.133 時(shí)才在該機(jī)器上新建指定文件灯荧;意思就是只對 testhost 組中特定的主機(jī)進(jìn)行操作,忽略組內(nèi)其他的主機(jī)盐杂《涸兀可以通過setup模塊查看各個(gè)參數(shù)的值

setup模塊變量獲取:
上面的變量:ansible_hostname和ansible_all_ipv4_addresses[0] 是從setup模塊中獲取

注意看
是:
"ansible_hostname": "web1"
還是:
"ansible_all_ipv4_addresses": [
"192.168.245.133"
]
如果變量值是用[]括起來的需要用[0]方式切片獲取

[root@master ansible]# ansible-playbook when.yml

示例5:handlers:由特定條件觸發(fā)的Tasks
調(diào)用及定義方式:
tasks:

  • name: TASK_NAME
    module: arguments
    notify: HANDLER_NAME
    handlers:
  • name: HANDLER_NAME
    module: arguments

handlers示例1
[root@ansible ansible]# cat handlers.yml

  • name: handlers test
    hosts: web1
    user: root
    tasks:
  • name: test copy
    copy: src=/etc/passwd dest=/tmp/handlers.txt
    notify: test handlers

handlers:

說明:只有 copy 模塊真正執(zhí)行后况褪,才會去調(diào)用下面的 handlers 相關(guān)的操作撕贞,追加內(nèi)容更耻。所以這種比較適合配置文件發(fā)生更改后测垛,需要重啟服務(wù)的操作。
[root@master ansible]# ansible-playbook handlers.yml

handlers示例2:

  • hosts: websrvs
    remote_user: root
    tasks:

  • name: install httpd package
    yum: name=httpd state=latest

  • name: install conf file
    copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
    notify: restart httpd service

  • name: start httpd service
    service: name=httpd state=started

handlers:

  • name: restart httpd service
    service: name=httpd state=restarted

示例6:include參數(shù)

  • name: create_user
    hosts: web1
    user: root
    gather_facts: false
    vars:
  • user: "msiyuetian"
    tasks:
  • name: create user
    user: name="{{ user }}"
  • include: handlers.yml //已經(jīng)用下面的import_playbook代替
  • import_playbook: handlers.yml

示例7:pause暫停
在playbook執(zhí)行的過程中暫停一定時(shí)間或者提示用戶進(jìn)行某些操作
常用參數(shù):
minutes:暫停多少分鐘
seconds:暫停多少秒
prompt:打印一串信息提示用戶操作

[root@ansible ansible]# cat wait.yml

  • name: wait
    hosts: web1
    tasks:
  • name: wait on user input
    pause: prompt="Warning! Detected slight issue. ENTER to continue CTRL-C a to quit"
  • name: timed wait
    pause: seconds=30
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秧均,一起剝皮案震驚了整個(gè)濱河市食侮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌目胡,老刑警劉巖锯七,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異誉己,居然都是意外死亡眉尸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門巨双,熙熙樓的掌柜王于貴愁眉苦臉地迎上來噪猾,“玉大人,你說我怎么就攤上這事筑累「だ” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵慢宗,是天一觀的道長坪蚁。 經(jīng)常有香客問我,道長镜沽,這世上最難降的妖魔是什么敏晤? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮缅茉,結(jié)果婚禮上嘴脾,老公的妹妹穿的比我還像新娘。我一直安慰自己宾舅,他們只是感情好统阿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布彩倚。 她就那樣靜靜地躺著,像睡著了一般扶平。 火紅的嫁衣襯著肌膚如雪帆离。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天结澄,我揣著相機(jī)與錄音哥谷,去河邊找鬼。 笑死麻献,一個(gè)胖子當(dāng)著我的面吹牛们妥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勉吻,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼监婶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了齿桃?” 一聲冷哼從身側(cè)響起惑惶,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎短纵,沒想到半個(gè)月后带污,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡香到,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年鱼冀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悠就。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡千绪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出理卑,到底是詐尸還是另有隱情翘紊,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布藐唠,位于F島的核電站帆疟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宇立。R本人自食惡果不足惜踪宠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妈嘹。 院中可真熱鬧柳琢,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至倒堕,卻和暖如春灾测,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垦巴。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工媳搪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骤宣。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓秦爆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親憔披。 傳聞我的和親對象是個(gè)殘疾皇子等限,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348