文章目錄
- Roles角色
- Ansible Roles目錄編排
- Roles各目錄作用
- 創建 role
- playbook調用角色
- 調用角色方法1:
- 調用角色方法2:
- 調用角色方法3:
- roles 中 tags 使用
- 實戰案例
Roles角色
- 角色是ansible自1.2版本引入的新特性,用于層次性、結構化地組織playbook。
- ==roles能夠根據層次型結構自動裝載變量文件、tasks以及handlers等。==要使用roles只需要在playbook中使用include指令即可。
- 簡單來講,roles就是通過分別將變量、文件、任務、模板及處理器放置于單獨的目錄中,并可以便捷地include它們的一種機制。
- 角色一般用于基于主機構建服務的場景中,但也可以是用于構建守護進程等場景中
運維復雜的場景:建議使用roles,代碼復用度高
- roles:多個角色的集合, 可以將多個的role,分別放至roles目錄下的獨立子目錄中
roles/
mysql/
httpd/
nginx/
redis/
Ansible Roles目錄編排
Roles各目錄作用
roles/project/
:項目名稱,有以下子目錄:
files/
:存放由copy或script模塊等調用的文件templates/
:template模塊查找所需要模板文件的目錄tasks/
:定義task,是role的基本元素,至少應該包含一個名為main.yml
的文件;其它的文件需要在此文件中通過include
進行包含handlers/
:至少應該包含一個名為main.yml
的文件;其它的文件需要在此文件中通過include
進行包含vars/
:定義變量,至少應該包含一個名為main.yml
的文件;其它的文件需要在此文件中通過include
進行包含meta/
:定義當前角色的特殊設定及其依賴關系,至少應該包含一個名為main.yml
的文件,其它文件需在此文件中通過include
進行包含default/
:設定默認變量時使用此目錄中的main.yml
文件,比vars的優先級低
創建 role
- 創建role的步驟
(1) 創建以roles命名的目錄
(2) 在roles目錄中分別創建以各角色名稱命名的目錄,如webservers等
(3) 在每個角色命名的目錄中分別創建files、handlers、meta、tasks、templates和vars目錄;用不到的目錄可以創建為空目錄,也可以不創建
(4) 在playbook文件中,調用各角色
針對大型項目使用Roles進行編排
范例:roles的目錄結構
playbook調用角色
調用角色方法1:
---
- hosts: webserversremote_user: rootroles:- mysql- memcached- nginx
?
調用角色方法2:
鍵role用于指定角色名稱,后續的k/v用于傳遞變量給角色
---
- hosts: allremote_user: rootroles:- mysql- { role: nginx, username: nginx }
調用角色方法3:
還可基于條件測試實現角色調用
---
- hosts: allremote_user: rootroles:- { role: nginx,username: nginx, when: ansible_distribution_major_version == ‘7’ }
roles 中 tags 使用
#nginx-role.yml
---
- hosts: websrvsremote_user: rootroles:- { role: nginx ,tags: [ 'nginx', 'web' ] ,when: ansible_distribution_major_version == "6“ }- { role: httpd ,tags: [ 'httpd', 'web' ] }- { role: mysql ,tags: [ 'mysql', 'db' ] }- { role: mariadb ,tags: [ 'mariadb', 'db' ] }
ansible-playbook --tags="nginx,httpd,mysql" nginx-role.yml
實戰案例
實現httpd角色
- 創建角色相關目錄
cd playbook
mkdir roles
cd roles/
mkdir httpd/{tasks,files,handlers} -pv#p:先創建父母了,v:顯示詳細信息
卸載掉httpd 、nginx等軟件;刪掉nginx、httpd、mysql等以前創建的用戶。
ansible all -a 'yum remove -y nginx'ansible all -a 'yum remove -y httpd'ansible all -a 'userdel nginx'ansible all -a 'userdel mysql'
- 創建角色相關的文件
- 創建組
cd /root/playbook/roles/httpd/tasks
vim group.yml
- name: create apache groupgroup: name=apache system=yes gid=80
- 創建用戶
vim user.yml
- name: create apache useruser: name=apache system=yes shell=/sbin/nologin home=/var/www/ uid=80 group=apache
- 安裝軟件
vim install.yml
- name: install httpd packageyum: name=httpd
- 完成配置
vim config.yml
- name: config filecopy: src=httpd.conf dest=/etc/httpd/conf/ backup=yesnotify: restart
- 拷貝新網頁
vim index.yml
- name: index.htmlcopy: src=index.html dest=/var/www/html/
- 啟動服務
vim service.yml
- name: start serviceservice: name=httpd state=started enabled=yes
- 定義觸發器,用于重啟服務
cd ../handlers/
vim main.yml
- name: restartservice: name=httpd state=restarted
- 在files目錄下準備兩個文件:
httpd.conf
、index.html
- 本地主機如果沒有httpd需要先安裝
yum install httpd -y
cp /etc/httpd/conf/httpd.conf /root/playbook/roles/httpd/files/
vim httpd.conf#修改端口為81
- 創建一個hmtl文件
index.html
(可以用AI生成)
tree httpd
- 在playbook中調用角色
vim /root/playbook/role_httpd.yml
---
# httpd role
- hosts: webserversremote_user: rootroles:- httpd
ansible-playbook role_httpd.yml
本地訪問:輸入192.168.100.101:81
將端口號改為80,重新執行:
cd roles/httpd/files/
vim httpd.conf#修改端口為80
ansible-playbook role_httpd.yml
本地訪問:輸入192.168.100.101