Linux九陰真經之九陰白骨爪殘卷5(ansible用法二之Playbook和YAML語法)
playbook是由一個或多個“play”組成的列表
play的主要功能在於將事先歸並為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來講,所謂task無非是調用ansible的module。將多個play組織在一個playbook中,即可讓他們聯通起來按事先編排的機制運行。
Playbook 采用yaml 語言編寫每一個ansible 的 playbook 都是一個yaml格式的文件,因此要學習編寫劇本(playbook), 我們先來了解 yaml 語法的基本用法
一、YAML介紹
YAML 是一個可讀性高的用阿裏表達資料序列的格式。YAML參考了其他多種語言,包括:XML、
C語言、Python、Perl以及電子郵件格式RFC2822等。Clark Evans在2001年在首次發表了這種
語言,另外Ingy d?t Net與Oren Ben-Kiki也是這語言的共同設計者
二、特性
YAML的可讀性好
YAML和腳本語言的交互性好
YAML使用實現語言的數據類型
YAML有一個一致的信息模型
YAML易於實現
YAML可以基於流來處理
YAML表達能力強,擴展性好
YAML語法格式:
1.在單一檔案中,可用連續三個連字號(——)區分多個檔案。另外,還有選擇性的連續三個點號
( … )用來表示檔案結尾
2.次行開始正常寫Playbook的內容,一般建議寫明該Playbook的功能
3.使用#號註釋代碼
4.縮進必須是統一的,不能空格和tab混用
5.縮進的級別也必須是一致的,同樣的縮進代表同樣的級別,程序判別配置的級別是通過縮進結
合換行來實現的
6.YAML文件內容和Linux系統大小寫判斷方式保持一致,是區別大小寫的,k/v的值均需大小寫敏感
7.k/v的值可同行寫也可換行寫。同行使用:分隔
8.v可是個字符串,也可是另一個列表
9.一個完整的代碼塊功能需最少元素需包括 name: task
10.一個name只能包括一個task
11.YAML文件擴展名通常為yml或yaml
YAML語法簡介:
[列表]
List:列表,其所有元素均使用“-”打頭
示例:
# A list of tasty fruits
– Apple
– Orange
– Strawberry
– Mango
[字典]
Dictionary:字典,通常由多個key與value構成
示例:
—
# An employee record
name: Example Developer
job: Developer
skill: Elite
也可以將key:value放置於{}中進行表示,用,分隔多個key:value
示例:
—
# An employee record
{name: Example Developer, job: Developer, skill: Elite}
三、劇本 playbook
Playbook核心元素:
Hosts:執行的遠程主機列表
Tasks:任務列表
Varniables:內置變量或自定義變量在playbook中調用
Templates:模板,可替換模板文件中的變量並實現一些簡單邏輯的文件
Handlers:和notify結合使用,由特定條件觸發的操作,滿足條件方才執行,否則不執行
tags:標簽,指定某條任務執行,用於選擇運行playbook中的部分代碼。ansible具有冪等性。因此
會自動跳過沒有變化的部分。此時,如果確信其沒有變化,就可以通過tags跳過此些代碼片段
Hosts:
作用:playbook中的每一個play的目的都是為了讓某個或某些主機以某個指定的用戶
身份執行任務。hosts用於指定要執行指定任務的主機,須事先定義在主機清單中
可以是如下形式:
one.example.com
one.example.com:two.example.com
192.168.1.50
192.168.1.*
websrvs:dbsrvs 兩個組的並集
websrvs:&dbsrvs 兩個組的交集
webservers:!dbsrvs 在websrvs組,但不在dbsrvs組
示例:
– hosts: websrvs:dbsrvs
remote_user
作用:可用於Host和task中。也可以通過指定其通過sudo的方式在遠程主機上執行任務,
其可用於play全局或某任務;此外,甚至可以在sudo時使用sudo_user指定sudo時切換的
用戶
– hosts: websrvs
remote_user: root
tasks:
– name: test connection
ping:
remote_user: magedu
sudo: yes 默認sudo為root
sudo_user:wang sudo為wang
tasks:
作用:任務列表
格式:module: arguments
註意:shell和command模塊後面跟命令,而非key=value
檢查playbook:
ansible-playbook -C file.yml
運行playbook的方式:
ansible-playbook <filrname.yml> …[options]
options:
–check 只檢測可能會發生的改變,但不真正的操作
–list-hosts 列出運行任務的主機
–limit 主機列表 只針對主機列表中的主機執行
-v,-vv,-vvv 顯示詳細過程
一個最簡單的Playbook需包含的基礎組件有host、remote_user、tasks
示例1:
vim http.yml
—
– hosts: websrvs
remote_user: root
tasks:
– name: create new file
file: name=/data/newfile state=touch
– name: create new file
user: name=test2 system=yes shell=/sbin/nologin
– name: install package
yum: name=httpd
– name: copy index
copy: src=/var/www/html/index.html dest=/var/www/html/
– name: start service
service: name=httpd state=started enabled=yes
例: 創建一個簡單的劇本並執行
[root@centos7 ansible]#vim haha.yml
tags標簽
task任務也可以通過”tags”打標簽,而後可在ansible-playbook命令上使用-t指定進行調用
示例2:使用tags
vim http.yml
—
– host: websrvs
remote_user: root
tasks:
– name: install httpd package
yum: name=httpd
tags: inshttpd
– name: copy conf file
copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
tags: cphttpd
– name: start service
service: name=httpd state=startd enable=yes
tags: rshttpd
ansible-playbook -t rshttpd httpd.yml 單獨執行rshttp
Linux九陰真經之九陰白骨爪殘卷5(ansible用法二之Playbook和YAML語法)