ansible-playbook組件解析及操作全解

一、ansible-playbook介紹:

?playbook是由一個或多個”play”組成的列表。play的主要功能在于將事先歸為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來將,所謂的task無法是調用ansible的一個module。將多個paly組織在一個playbook中,即可以讓他們聯通起來按事先編排的機制同唱一臺大戲。

1、playbook基礎組件:

hosts?playbook中的每一個paly的目的都是為了讓某個或某些以某個指定用戶的身份執行任務。hosts用于指定要執行指定任務的主機,其可以是一個或多個由冒號分割主機組。

user?remote_user則用于指定遠程主機上的執行任務的用戶。

任務列表:

play的主體部分是task?list.?task?list中的各任務按次序逐個在hosts中指定的所有主機上執行,即在所有主機上完成第一個任務后再開始第二個。

action

任務執行過程

handlers

用于當前關注的資源發生變化時采取一定指定的操作

2、實例:

[root@node1?playbook]#?cat?web.yml
-?hosts:?test??\\主機組,在/etc/ansible/hosts定義
??remote_user:?root??\\遠端執行任務的用戶
??tasks:?\\任務
??-name:?install?httpd??\\任務描述
???command:?yum?-y?install?httpd??\\調用ansible的command模塊安裝httpd
??-name:?provide?httpd.conf?\\任務描述
copy:src="/root/httpd.conf"?dest="/etc/httpd/conf/httpd.conf"?\\調用ansible的copy模塊,httpd安裝完成后將事先準備好的httpd.conf文件復制到/etc/httpd/conf目錄下
????tags:?conf??\\給此任務打標記,可單獨執行標記的任務,使用?ansible-playbook?-C?命令執行
????notify:??\\文件內容變更通知
????-?server?restart??\\通知到指定的任務
??-?name:?server?start??\\任務描述
????service:?name=httpd?state=started?enabled=true?\\調用ansible的service模塊的屬性定義安裝完成httpd以后httpd服務的管理
??handlers:?\\定義接受關注的資源變化后執行的動作
??-?name:?server?restart??\\任務描述
????service:?name=httpd?state=restarted???\\當關注的資源發生變化后調用service模塊,采取的響應的動作
執行過程如下:
[root@node1?playbook]#?ansible-playbook?web.yml?

PLAY?[test]?*******************************************************************?

GATHERING?FACTS?***************************************************************?
ok:?[172.16.2.13]

TASK:?[install?httpd]?*********************************************************?
changed:?[172.16.2.13]

TASK:?[provide?httpd.conf]?****************************************************?
changed:?[172.16.2.13]

TASK:?[server?start]?**********************************************************?
changed:?[172.16.2.13]

NOTIFIED:?[server?restart]?****************************************************?
changed:?[172.16.2.13]

PLAY?RECAP?********************************************************************?
172.16.2.13????????????????:?ok=5????changed=4????unreachable=0????failed=0

二、ansible的roles介紹:

ansible的roles用于層次性、結構化地組織palybook。roles能夠根據層次型結構自動裝載變量文件、tasks及handlers等。要使用roles只需要playbook中使用include指令即可。

rules的組成:

root@node1?playbook]#?tree??roles/
roles/?\\ansible所有的信息都放到此目錄下面對應的目錄中
└──?nginx??\\角色名稱
????├──?default??\\為當前角色設定默認變量時使用此目錄,應當包含一個main.yml文件;
????├──?files??\\存放有copy或script等模塊調用的文件
????├──?handlers?\\此目錄總應當包含一個main.yml文件,用于定義各角色用到的各handler
????├──?meta?\\應當包含一個main.yml,用于定義角色的特殊設定及其依賴關系;1.3及以后版本支持
????├──?tasks?\\至少包含一個名為main.yml的文件,定義了此角色的任務列表,可使用include指令
????├──?templates?\\template模塊會自動在此目錄中尋找Jinja2模板文件
????└──?vars??\\應當包含一個main.yml文件,用于定義此角色用到的變量

roles介紹完了,那么我們就利用ansible的roles來配置nginx

1、首先按照上面的要求創建要用到的目錄

[root@node1?playbook]#?mkdir?-pv?roles/nginx/{tasks,files,templates,handlers,vars,meta,default}

2、準備nginx配置文件

準備nginx.conf配置文件,使用模板文件配置
[root@node1?playbook]#?cd?roles/nginx/templates/
[root@node1?~]#?ansible?all?-m?setup?|?grep?ansible_processor_cores
????????"ansible_processor_cores":?1,??\\獲取ansible的要調用的相關函數
[root@node1?playbook]#?cd?roles/nginx/templates/???\\模板文件一定要放到此目錄?????
[root@node1?templates]#?vim?nginx.conf?
worker_processes?{{??ansible_processor_cores?}};??\\調用獲取到的函數
準備nginx的default.conf文件
[root@node1?playbook]#?ls?-l?roles/nginx/files/
-rw-r--r--.?1?root?root?1290?Nov?12??2014?default.conf

3、準備nginx的rpm包

[root@node1?playbook]#?ls?-l??roles/nginx/files/
-rw-r--r--.?1?root?root???1290?Nov?12??2014?default.conf
-rw-r--r--.?1?root?root?319456?Mar?29?20:44?nginx-1.4.7-1.el6.ngx.x86_64.rpm

4、在tasks目錄中配置任務列表

[root@node1?playbook]#?cd??roles/nginx/tasks/
[root@node1?tasks]#?vim??main.yml?
??-?name:?copy?nginx.rpm
????copy:?src=nginx-1.4.7-1.el6.ngx.x86_64.rpm??dest=/tmp/nginx-1.4.7-1.el6.ngx.x86_64.rpm
??-?name:?install?nginx
????shell:?yum?-y??install?/tmp/nginx-1.4.7-1.el6.ngx.x86_64.rpm
??-?name:?provides?nginx.conf
????template:?src=nginx.conf??dest=/etc/nginx/nginx.conf
????tags:?nginxconf
????notify:
????-?server?restart
??-?name:?provides?default.conf
????copy:?src=default.conf?dest=/etc/nginx/conf.d/default.conf?
????tags:?nginxconf
??-?name:?server?start
????service:?name=nginx?enabled=true?state=started

5、在handlers目錄中配置定義handler信息

[root@node1?playbook]#?cd?roles/nginx/handlers/
[root@node1?handlers]#?vim??main.yml?
-?name:?server?restart
??service:?name=nginx??state=restarted

6、在roles同一級目錄中創建site.yml文件

[root@node1?playbook]#?cat?site.yml?
-?hosts:?nginx
??remote_user:?root
??roles:
??-?nginx

7、應用配置:

[root@node1?playbook]#?ansible-playbook?site.yml?

PLAY?[nginx]?******************************************************************?

GATHERING?FACTS?***************************************************************?
ok:?[172.16.2.13]

TASK:?[nginx?|?copy?nginx.rpm]?************************************************?
ok:?[172.16.2.13]

TASK:?[nginx?|?install?nginx]?*************************************************?
changed:?[172.16.2.13]

TASK:?[nginx?|?provides?nginx.conf]?*******************************************?
changed:?[172.16.2.13]

TASK:?[nginx?|?provides?default.conf]?*****************************************?
changed:?[172.16.2.13]

TASK:?[nginx?|?server?start]?**************************************************?
changed:?[172.16.2.13]

NOTIFIED:?[nginx?|?server?restart]?********************************************?
changed:?[172.16.2.13]

PLAY?RECAP?********************************************************************?
172.16.2.13????????????????:?ok=7????changed=5????unreachable=0????failed=0

8、在node2主機上查看nginx是否已啟動

[root@node2?~]#?ss?-tpln?|?grep?80
LISTEN?????0??????128???????????????????????*:80???????????????????????*:*??????users:(("nginx",8934,8),("nginx",8936,8))

9、roles目錄總體結構:

[root@node1?playbook]#?tree?roles/
roles/
└──?nginx
????├──?default
????├──?files
????│??├──?default.conf
????│??└──?nginx-1.4.7-1.el6.ngx.x86_64.rpm
????├──?handlers
????│??└──?main.yml
????├──?meta
????├──?tasks
????│??└──?main.yml
????├──?templates
????│??└──?nginx.conf
????└──?vars

 

到此ansible常用的知識已介紹完畢,僅個人學習總結,大家有疑問的話可以一起交流。

原創文章,作者:馬行空,如若轉載,請注明出處:http://www.www58058.com/7001

(22)
馬行空馬行空
上一篇 2015-08-24 21:42
下一篇 2015-08-24 21:46

相關推薦

  • 第3周作業

    一、列出當前系統上的所有已經登錄的用戶的用戶名 [root@bogon tmp]# who | cut -d ” ” -f1 | sort -urootwing[root@bogon tmp]# who | cut -d ” ” -f1 | uniqrootwing 二、取出最后登錄到當前系統的用戶相關信息 […

    Linux干貨 2017-07-25
  • iptables

    1.開啟防火墻systemctl start firewalld2.清空所有的默認規則,定義自己的規則iptables -F 查看此時的iptablesiptables -nL Chain INPUT (policy ACCEPT)target prot opt source destination Chain FORWARD (policy ACCEPT)…

    Linux干貨 2017-07-26
  • N25期–第十六周作業

    1源碼編譯安裝LNMP架構環境; 2、編寫一個腳本完成以下功能: (1)、一鍵搭建LNMP源碼編譯環境; (2)、可通過在腳本后面跟上一些參數來自定義安裝目錄等其他選項。” 1、源碼編譯安裝LNMP架構環境; 安裝編譯工具和庫文件 1 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libp…

    Linux干貨 2017-05-08
  • linux作業管理和任務計劃

    一、作業管理 Linux 的作業控制     前臺作業:通過終端啟動,且啟動后一直占據終端;     后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端) 如何讓作業運行于后臺? (1)  運行中的作業: Ctrl+z (2)&nb…

    Linux干貨 2016-09-13
  • Storm集群安裝詳解

    storm有兩種操作模式: 本地模式和遠程模式。 本地模式:你可以在你的本地機器上開發測試你的topology, 一切都在你的本地機器上模擬出來;  遠端模式:你提交的topology會在一個集群的機器上執行。 本文以Twitter Storm官方Wiki為基礎,詳細描述如何快速搭建一個Storm集群,其中,項目實踐中遇到的問題及經驗總結,在相應章…

    Linux干貨 2015-04-04
  • Linux基礎(七)-軟RAID,LVM,bash腳本之循環

    1.創建一個10G的分區,并格式為ext4的文件系統; (1)要求其block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl;(2)掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@localhost ~]# fdisk /dev/sdb We…

    Linux干貨 2016-11-06

評論列表(2條)

  • stanley
    stanley 2015-08-24 21:45

    最近也在研究ansible,有問題一塊探討, http://www.www58058.com/doc/ansible/ 翻譯項目有興趣的話也可以共同玩耍

    • 馬行空
      馬行空 2015-08-25 09:20

      @stanley好的,Ansible中文權威qq全已添加,謝謝

欧美性久久久久