轉載於http://www.178linux.com/7001
一、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常用的知識已介紹完畢,僅個人學習總結,大家有疑問的話可以一起交流