一、基本概念

Ansible自1.2版本引入的新特性,用于层次性,结构化地组织playbook。roles能够根据层次结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于主机构建服务的场景中,但也可以使用于构建守护进程等场景中。
复杂场景:建议使用roles,代码复用度高,变更指定主机或主机组,如命令不规范,维护和传承成本大,某些功能需要多个playbook,通过includes可以实现。

二、目录结构说明

2.1 目录结构

image.jpeg
roles目录结构
playbook.yml
roles
project/
tasks/
files/
vars/ 不常用
defaults/ 不常用
templates/
handlers/
meta/ 不常用

2.2 roles各目录的作用

/roles/project/:项目名称,有以下目录
files/:存放由copy模块或scripts模块等调用的文件
template/:template模块 查找所需要模板文件的目录
tasks/:定义tasks,roles的基本元素,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
handlers/:至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
vars/:定义变量,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
default/:设定默认变量时使用此目录中的main.yml文件

三、实例说明

下面的压缩文件是一些例子,思维导图对案例的目录结构做了一个说明
ansible.zip

Role角色 - 图2