一、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 |
結果示例:
至此,批量部署lamp平臺就完成了。以上只是一個示例,具體情況,還需具體對待。