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
下一篇 2015-08-24

相關推薦

  • 網絡基礎知識子網劃分

    一、某公司申請到一個C 類IP 地址,但要連接6 個的子公司,最大的一個子 公司有26 臺計算機,每個子公司在一個網段中,則子網掩碼應設為?  根據要劃分的子網數量來算子網掩碼的。2的M次方大于等于N。其中M是劃分子網時要借的位數。N是要劃分的子網數。 將需求代入公式,M=3,C類IP默認的掩碼為24位,再從主機位中借來3位,就是27位。二進制表示…

    Linux干貨 2016-09-06
  • rpm與yum的初步學習

    rpm與yum的初步學習   我們在使用linux系統時需要安裝和卸載軟件,我們這節就先來看一下rpm和yum的初步簡單實用。 linux軟件安裝:   安裝程序的方式:      通用二進制格式:直接解壓壓縮文件,就可以使用。但一定要注意安裝平臺。     &nbsp…

    Linux干貨 2016-08-24
  • 基于CentOS7實現LAMP(上)

    基于CentOS7實現LAMP(上)   情景模式: (1)php以模塊方式運行  提供兩個虛擬主機;                    &nbs…

    Linux干貨 2016-08-22
  • 二、(2)bash的工作特性之:命令執行狀態返回值及命令行展開

    bash 工作特性 命令執行狀態 命令行展開

    2018-01-10
  • 全球敏捷運維峰會Gdevops 2017成都站嘉賓主題提前看!

    2017年全球敏捷運維峰會(Gdevops, Global Devops Summit)將于2017年在成都、上海、北京、廣州四城全面啟動,本次峰會由上海市經濟和信息化委員會指導,上海市云計算產業促進中心、DBAplus社群主辦,數十家媒體單位共同支持,活動家提供全球敏捷運維峰會在線報名服務。 成都站即將于13日啟航,搭車地址:https://www.huo…

    Linux干貨 2017-05-11
  • 第二周 博客作業

    1、linux上的文件管理類命令有哪些,其常用的使用方法及其相關示例。 文件管理命令:rm  mv cp       cp 復制命令       cp   源文件   目標文件           工作機制:如…

    Linux干貨 2016-11-03

評論列表(2條)

  • stanley
    stanley 2015-08-24 21:45

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

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

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

欧美性久久久久