ansible-playbook


一、ansible-playbook介紹:

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

1、playbook基礎組件:

hosts

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

user

1
remote_user則用於指定遠程主機上的執行任務的用戶。

任務列表:

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

action

1
任務執行過程

handlers

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

2、實例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[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的組成:

1
2
3
4
5
6
7
8
9
10
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、首先按照上面的要求創建要用到的目錄

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

2、准備nginx配置文件

1
2
3
4
5
6
7
准備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 }};  \\調用獲取到的函數
1
2
3
准備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包

1
2
3
[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目錄中配置任務列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[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信息

1
2
3
4
[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文件

1
2
3
4
5
[root@node1 playbook] # cat site.yml 
- hosts: nginx
   remote_user: root
   roles:
   - nginx

7、應用配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[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是否已啟動

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

9、roles目錄總體結構:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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常用的知識已介紹完畢,僅個人學習總結,大家有疑問的話可以一起交流。

注:轉載自:linux運維部落 » ansible-playbook


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM