ansbile playbook是一系列ansible命令的集合,利用yaml 語言編寫,playbook命令根據自上而下的順序依次執行。同時,playbook開創了不少特性,它能夠容許你傳輸某個命令的狀態到後面的指令,如你能夠從一臺機器的文件中抓取內容並附爲變量,而後在另外一臺機器中使用,這使得你能夠實現一些複雜的部署機制,這是ansible命令沒法實現的.nginx
Playbook是Ansible的配置,部署,編排語言。他們能夠被描述爲一個須要但願遠程主機執行命令的方案,或者一組IT程序運行的命令集合。shell
playbook的構成apache
playbook是由一個或多個"play"組成的列表。play的主要功能在於將事先歸併爲一組的主機裝扮成事先經過ansible中的task定義好的角色。從根本上來說所謂task無非是調用ansible的一個module。將多個play組織在一個playbook中便可以讓它們聯同起來按事先編排的機制同唱一臺大戲。其主要有如下四部分構成:vim
Playbooks Variables #變量元素,可傳遞給Tasks/Templates使用; Tasks #任務元素,即調用模塊完成任務; Templates #模板元素,可根據變量動態生成配置文件; Hadlers #處理器元素,一般指在某事件知足時觸發的操做; Roles #角色元素
使用Playbook時經過ansible-playbook命令使用,它的參數和ansible命令相似,如參數-k(–ask-pass) 和-K (–ask-sudo) 來詢問ssh密碼和sudo密碼,-u指定用戶,這些指令也能夠經過規定的單元寫在playbook裏。centos
ansible-playbook的簡單使用方法:ssh
ansible-playbook /etc/ansible/site.yml
如下是簡單的playbook例子(play能夠有多個):spa
1.使用playbook 實現新增一個用戶的功能:rest
#vim create_user.yml code
--- - hosts: test gather_facts: false user: root vars: user: "user1" tasks: - name: create user user: name="{{ user }}" createhome=yes
各行參數詳解:對象
hosts參數指定了對哪些主機進行參做,test爲定義的主機組. user參數指定了使用什麼用戶登陸遠程主機操做; gather_facts參數指定了在如下任務部分執行前,是否先執行setup模塊獲取主機相關信息. vars參數,指定了變量,這裏指定一個user變量,其值爲user1,須要注意的是,變量值必定要用引號引住; task指定了一個任務,其下面的name參數是對任務的描述,在執行過程當中會打印出來 user提定了調用user模塊,name是user模塊裏的一個參數,而增長的用戶名字調用了上面user變量的值,createhome=yes表示建立用戶家目錄,也是user模塊的參數對象. 一樣,若是想實現把這個新增的用戶刪除,只需將該playbook文件的最後一行替換爲以下行再執行相應的playbook便可: user: name="{{ user }}" state=absent remove=yes
2.使用playbook更改一組主機主機名的方法:
--- - hosts : test remote_user : root tasks : - name : show hostname shell : hostname - name: show ipaddress command : ip addr - hostname : name=benet.develop.com
說明:在tasks任務中,調用了shell和command模塊來執行查詢命令,- hostname是使用hostname模塊的name方法來更改主機名.
3.使用playbook安裝apache服務實例:
--- - hosts: test remote_user: root tasks: - name: Install the latest version of apache. yum: name=httpd state=latest - name: write the apache config file copy: src=/tmp/httpd.conf dest=/etc/httpd/conf/httpd.conf notify: - restart httpd service - name: Start the apache service service: name=httpd state=started handlers: - name: restart httpd service service: name=httpd state=restarted #注意:在notify中定義內容必定要和tasks中定義的 - name 內容同樣,這樣才能達到觸發的效果,不然會不生效。
4.使用playbook安裝Nginx實例:
--- - hosts: test tasks: - name: Install nginx Depend on the package yum: pkg={{ item }} state=latest with_items: - openssl-devel - gcc - pcre-devel - zlib-devel - name: Installing NGINX repo rpm yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm - name: Installing NGINX yum: name=nginx state=latest - name: write the NGINX config file copy: src=/tmp/nginx.conf dest=/etc/nginx/nginx.conf notify: - restart NGINX service - name: Start the NGINX service service: name=nginx state=started handlers: - name: restart NGINX service service: name=nginx state=restarted