第十八章 Ansible-playbook-Role基礎介紹
阿新 • • 發佈:2021-12-23
一、Ansible Roles概述
roles不管是Ansible還是saltstack,我在寫一鍵部署的時候,都不可能把所有的步驟全部寫入到一個'劇本'檔案當中,我們肯定需要把不同的工作模組,拆分開來,解耦,那麼說到解耦,我們就需要用到roles官方推薦,因為roles的目錄結構層次更加清晰。
例如:我們之前推薦大家寫一個base.yml裡面寫所有基礎優化的專案,其實把所有東西摞進去也是很雞肋的,不如我們把這些功能全部拆分開,誰需要使用,就呼叫即可。
建議:每個roles最好只使用一個tasks這樣方便我們去呼叫,能夠很好的做到解耦。(SOA)
二、Ansible Roles目錄結構
角色期望檔案位於某些目錄名稱中。角色必須至少包含其中一個目錄,但是排除任何未使用的目錄是完全正確的。在使用時,每個目錄必須包含一個main.yml檔案,其中包含相關內容: production # inventory file for production servers staging # inventory file for staging environment group_vars/ group1.yml # here we assign variables to particular groups group2.yml host_vars/ hostname1.yml # here we assign variables to particular systems hostname2.yml library/ # if any custom modules, put them here (optional) module_utils/ # if any custom module_utils to support modules, put them here (optional) filter_plugins/ # if any custom filter plugins, put them here (optional) site.yml # master playbook webservers.yml # playbook for webserver tier dbservers.yml # playbook for dbserver tier roles/ common/ # this hierarchy represents a "role" tasks/ # main.yml # <-- tasks file can include smaller files if warranted handlers/ # main.yml # <-- handlers file templates/ # <-- files for use with the template resource ntp.conf.j2 # <------- templates end in .j2 files/ # bar.txt # <-- files for use with the copy resource foo.sh # <-- script files for use with the script resource vars/ # main.yml # <-- variables associated with this role defaults/ # main.yml # <-- default lower priority variables for this role meta/ # main.yml # <-- role dependencies library/ # roles can also include custom modules module_utils/ # roles can also include custom module_utils lookup_plugins/ # or other types of plugins, like lookup in this case webtier/ # same kind of structure as "common" was above, done for the webtier role monitoring/ # "" fooapp/ # ""
site:是ansible的統一入口,就行呼叫的安裝服務總配置
webservers.yaml:主要是對ansible裡一些能做功能,yum等
roles:角色目錄
common:公共的roles目錄
nginx:角色的軟體目錄
tasks:包含角色要執行的主要任務列表
handlers:包含處理程式,可以由此角色使用,甚至可以在此角色之外的任何位置使用
defaults:角色預設的變數
vars:角色其他的變數
files:包含可以通過此角色部署的檔案
templates:包含可以通過此角色部署的模板
meta:角色定義的一些元資料
三、Ansible Roles目錄建立
1.手動建立
[root@m01 ~]# mkdir /project [root@m01 ~]# cd /project/ [root@m01 /project]# touch site.yml [root@m01 /project]# mkdir roles [root@m01 /project]# cd roles/ [root@m01 /project/roles]# mkdir {nginx,php,myriadb,nfs-server,nfs-client}
2.使用命令建立
[root@m01 /project/roles]# ansible-galaxy init nginx - Role nginx was created successfully [root@m01 /project/roles]# tree ./ ./ ├── mariadb ├── nfs-client ├── nfs-server ├── nginx │ ├── defaults │ │ └── main.yml │ ├── files │ ├── handlers │ │ └── main.yml │ ├── meta │ │ └── main.yml │ ├── README.md │ ├── tasks │ │ └── main.yml │ ├── templates │ ├── tests │ │ ├── inventory │ │ └── test.yml │ └── vars │ └── main.yml └── php 13 directories, 8 files [root@m01 /project/roles]#
四、Ansible Roles 依賴
roles允許你再使用roles時自動引入其他的roles。role依賴關係儲存在roles目錄中meta/main.yml檔案中。
例如:推送wordpress並解壓,前提條件,必須要安裝nginx和php,把服務跑起來,才能執行wordpress的頁面,此時我們就可以在wordpress的roles中定義依賴nginx和php的roles
[root@m01 roles]# vim /etc/ansible/roles/wordpress/meta/main.yml
dependencies:
- { role: nginx }
- { role: php }
如果編寫了meta目錄下的main.yml檔案,那麼Ansible會自動先執行meta目錄中main.yml檔案中的dependencies檔案,如上所示,就會先執行nginx和php的安裝。