Roles的概述
Roles可以根據層次型結構自動裝載變量文件、task以及handlers等。
簡單來說,Roles就是經過分別將變量、文件、任務、模塊及處理器放置於單獨的目錄中,並能夠便捷地include它們。
Roles通常用於基於主機構建服務的場景中,但也能夠用於構建守護進程等場景中。
Roles的目錄
目錄名稱 |
具體含義 |
files |
用來存放由copy模塊或script模塊調用的文件 |
templates |
用來存放j正則模板,template模塊會自動在此目錄中尋找正則模板文件 |
tasks |
此目錄應當包含一個main.yml文件,用於定義此角色的任務列表,此文件能夠使用include包含其它的位於此目錄的task文件 |
handlers |
此目錄應當包含一個main.yml文件,用於定義此角色中觸發條件時執行的動做 |
vars |
此目錄應當包含一個main.yml文件,用於定義此角色用到的變量 |
defaults |
此目錄應當包含一個main.yml文件,用於爲當前角色設定默認變量 |
meta |
此目錄應當包含一個main.yml文件,用於定義此角色的特殊設定及其依賴關係 |
在playbook中使用Roles的步驟
#yum裝完默認就有
mkdir /etc/ansible/roles/ -p
mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all
#文件名本身定義,引用的時候注意
- 在roles目錄中分別建立以各角色名稱命令的目錄,如httpd
mkdir /etc/ansible/roles/common -p
- 在每一個角色命令的目錄中分別建立files、handlers、tasks、templates、meta、defaults和vars目錄,用不到的目錄能夠建立爲空目錄,但不能夠不建立
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
- 在每一個角色的handlers、tasks、meta、defaults、vars目錄下建立main.yml文件,千萬不能自定義
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
vim /etc/ansible/site.yml
- hosts: webserver
remote_user: root
roles:
- httpd
- mysql
安裝搭建LAMP架構實例演示
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml
#寫一個簡單的tasks/main.yml
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: ensure apache is at the latest version
yum: pkg={{ pkg }} state=latest
#定義變量,能夠定義在全局變量中,也能夠定義在roles角色變量中,通常定義在角色變量中
vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: ensure mysql is at the latest version
yum: pkg={{ pkg }} state=latest
#定義變量
vim /etc/ansible/roles/mysql/vars/main.yml
pkg: mariadb*
vim /etc/ansible/roles/php/tasks/main.yml
- name: ensure php is at the latest version
yum: pkg={{ pkg }} state=latest
#定義變量
vim /etc/ansible/roles/php/vars/main.yml
pkg: php*
vim /etc/ansible/site.yml
- hosts: webserver
remote_user: root
roles:
- httpd
- mysql
- php
#執行劇本
ansible-playbook site.yml
執行完之後在遠程主機上,查詢驗證指定服務是否安裝
rpm -q httpd
httpd-2.4.6-90.el7.centos.x86_64
rpm -q mariadb
mariadb-5.5.64-1.el7.x86_64
rpm -q php
php-5.4.16-46.1.el7_7.x86_64
謝謝閱讀!