一.初識roles
上節中我們已經了解了playbook,詳見 https://www.cnblogs.com/wangtaobiu/p/10691689.html
當我們在配置playbook時會發現它會越來越龐大,所有的tasks,handles,templates等任務或文件都寫在一個yml文件中,這樣在修改中難免會浪費時間,顯得缺乏條理性.而roles的出現剛好解決了這一問題.
roles的特點 : 目錄結構清晰.在使用roles的時候,我們會將不同的任務放在不同的目錄下,結構一目了然,在修改的過程中也更方便尋找.
可以相互調用.在roles中,所有的任務和文件都可以自由調用,通過import或include方法,可以將要執行的任務導入一個文件中,使roles在實現playbook功能的情況下更有條理性.下邊是roles目錄下安裝nginx的目錄結構 :
nginx/
├── files 存放靜態的文件
│ └── fstab
├── handlers 存放需要觸發的任務,里面必須main.yml文件
│ └── main.yml
├── tasks 存放的執行的任務 ,里面必須main.yml文件
│ ├── copyfile.yml
│ ├── install.yml
│ ├── main.yml
│ └── start.yml
├── templates 存放的模板文件
│ ├── centos6.conf
│ └── nginx.conf
└── vars 存放的是參數,里面必須main.yml文件
└── main.yml
從上圖中可以看出handles,tasks,vars文件需要用main.yml文件來觸發任務,而且針對Contos的不同版本做了相應的判斷,所有任務一目了然.
二.roles入口文件設置
當我們把roles中所有的任務都配置好以后,最后就需要在roles同級的目錄下設置入口文件.入口文件的設置最好以任務名命名,方便識別.例如上邊的例子中入口文件可以命名為nginx.yml,下邊是文件中的內容,重點在於roles下指定nginx目錄.
- hosts: web
remote_user: root
roles:
- nginx
三.roles中任務的導入
以下是tasks目錄下的main文件 :
- import_tasks: install.yml #下載
- import_tasks: copyfile.yml #復制文件到遠程主機
- import_tasks: start.yml #啟動nginx
- name: fstab
copy: dest=/tmp/wq.txt src=fstab
tags: fstab
注意 : 因為在main文件中任務是自上而下執行的,所以在導入任務時必須按順序進行.
四.roles的執行順序
- 先查找當前目錄下roles目錄里面指定的對應文件夾
- 找tasks目錄下面的main.yml文件,如果import_tasks 就導入
- 如果遇到了templates,去找templates文件夾下面的對應文件
- 如果遇到了notify,去找handlers里面的main.yml文件
- 如果遇到了copy,去找files里面的對應文件
- 如果看到了變量,如果是setup收集的變量就去setup,如果不是就去vars里面的main.yml文件查找