1. 程式人生 > >Linux九陰真經之九陰白骨爪殘卷5(ansible用法二之Playbook和YAML語法)

Linux九陰真經之九陰白骨爪殘卷5(ansible用法二之Playbook和YAML語法)

ren 通過 檢測 換行 分隔 pac root handle tags

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語法)