一、ansible Role介紹

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
# ansilbe自1.2版本引入的新特性,用於層次性、結構化地組織playbook。
# roles能夠根據層次型結構自動裝載變數檔案、tasks以及handlers等。
# 要使用roles只需要在playbook中使用include指令即可。
#簡單來講,roles就是通過分別將變數、檔案、任務、模組及處理器放置於單獨的目錄中,
# 並可以便捷地include它們的一種機制。
# 角色一般用於基於主機構建服務的場景中,但也可以是用於構建守護程式等場景中。
 
 
############## 建立role的步驟
 
(1) 建立以roles命名的目錄;
(2) 在roles目錄中分別建立以各角色名稱命名的目錄,如webservers等。注意:在 roles 
    必須包括 site.yml檔案,可以為空;
(3) 在每個角色命名的目錄中分別建立files、handlers、meta、tasks、templates和vars目錄;
    用不到的目錄可以建立為空目錄,也可以不建立;
(4) 在playbook檔案中,呼叫各角色;
 
############### role內各目錄中可用的檔案
 
tasks目錄:至少應該包含一個名為main.yml的檔案,其定義了此角色的任務列表;
   此檔案可以使用include包含其它的位於此目錄中的task檔案;
files目錄:存放由copy或script等模組呼叫的檔案;
templates目錄:template模組會自動在此目錄中尋找Jinja2模板檔案;
handlers目錄:此目錄中應當包含一個main.yml檔案,用於定義此角色用到的各handler;
    在handler中使用include包含的其它的handler檔案也應該位於此目錄中;
vars目錄:應當包含一個main.yml檔案,用於定義此角色用到的變數;
meta目錄:應當包含一個main.yml檔案,用於定義此角色的特殊設定及其依賴關係;
    ansible 1.3及其以後的版本才支援;
default目錄:為當前角色設定預設變數時使用此目錄;應當包含一個main.yml檔案。

二、基於Role實現 lamp 平臺的批量部署

實驗環境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
控制端:
172.16.10.9 server.magedu.com
 
被控制端:
172.16.10.22 node2.example.com
172.16.10.33 node3.example.com
172.16.0.50 director1.example.com
172.16.0.51 director2.example.com
 
計劃:
172.16.10.22 node2.example.com
172.16.10.33 node3.example.com
# 安裝 web php程式,並提供配置檔案
172.16.0.50 director1.example.com
172.16.0.51 director2.example.com
# 安裝 mysql mysql-server,並提供配置檔案
 
要求:基於主機名通訊(被控制端都可以解析到其他的主機名)

配置步驟:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
1、配置好 Inventory 檔案
# /etc/ansible/hosts
[webhosts]
node2.example.com
node3.example.com
 
[mysql]
director1.example.com
director2.example.com
 
2、建立對應的目錄樹
# 執行 tree /root/lamp/roles 檢視目錄樹
/root/lamp/roles
|-- common
|   |-- default
|   |-- files
|   |   `-- hosts
|   |-- handlers
|   |-- meta
|   |-- tasks
|   |   `-- main.yml
|   |-- templates
|   `-- vars
|-- db
|   |-- default
|   |-- files
|   |   `-- my.cnf
|   |-- handlers
|   |   `-- main.yml
|   |-- meta
|   |-- tasks
|   |   `-- main.yml
|   |-- templates
|   `-- vars
|-- db.yml
|-- php
|   |-- default
|   |-- files
|   |   `-- php.ini
|   |-- handlers
|   |-- meta
|   |-- tasks
|   |   `-- main.yml
|   |-- templates
|   `-- vars
|-- site.yml
|-- web
|   |-- default
|   |-- files
|   |   `-- httpd.conf
|   |-- handlers
|   |   `-- main.yml
|   |-- meta
|   |-- tasks
|   |   `-- main.yml
|   |-- templates
|   `-- vars
`-- web.yml
 
 
 
3、各個檔案的內容
# 當前所在目錄 /root/lamp/roles
# cat db.yml
- name: mysqld servise
  remote_user: root
  hosts: mysql
  roles:  
    - common 
    - db
 
# cat web.yml
- name: wed servise
  remote_user: root
  hosts: webhosts
  roles: 
    - common 
    - php  
    - web
     
# cat common/files/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.10.22 node2.example.com
172.16.10.33 node3.example.com
172.16.0.50 director1.example.com
172.16.0.51 director2.example.com
 
# cat common/tasks/main.yml
- name: Configure hostname resolve
  copy: src=hosts dest=/etc/hosts
 
# cat php/tasks/main.yml
- name: install php  
  yum: name=php state=present
- name: configuration php
  copy: src=php.ini dest=/etc/php.ini
 
# cat web/tasks/main.yml
- name: install httpd  
  yum: name=httpd state=present
- name: configuration httpd
  copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
  notify:
    - restart httpd
- name: service httpd start
  service: name=httpd enabled=no state=started
 
# cat web/handlers/main.yml
- name: restart httpd
  service: name=httpd state=restarted
 
# cat db/tasks/main.yml
- name: install mysql
  yum: name=mysql state=present
- name: install mysql-server
  yum: name=mysql-server state=present
- name: configuration mysqld
  copy: src=my.cnf dest=/etc/my.cnf
  notify:
    - restart mysqld
- name: service mysqld start
  service: name=mysqld enabled=no state=started
 
# cat db/handlers/main.yml
- name: restart mysqld
  service: name=mysqld state=restarted
   
4、開始批量部署
ansible-playbooks web.yml
ansible-playbooks db.yml

結果示例:

14

15

16

 

至此,批量部署lamp平臺就完成了。以上只是一個示例,具體情況,還需具體對待。