roles 角色
在ansible中,roles是playbooks的一部分。playbooks模块化之后,成为roles的组织结构,易读,代码可重用,层次清晰。
ansible的roles用于层次性、结构化地组织palybook。roles能够根据层次型结构自动装载变量文件、tasks及handlers等。要使用roles只需要playbook中使用include指令即可。
以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;
role_name/
files/:
存储由copy或script等模块调用的文件;
tasks/:
此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
handlers/:
此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用;
vars/:
此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
templates/:
存储由template模块调用的模板文本;
meta/:
此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;
default/:
此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;
在playbook中调用角色的方法:
- hosts: HOSTS
remote_user: USERNAME
roles:
- ROLE1
- ROLE2
- { role: ROLE3, VARIABLE: VALUE, ...}
- { role: ROLE4, when: CONDITION }
roles目录结构
root@node1 playbook]# tree roles/
roles/ \\ansible所有的信息都放到此目录下面对应的目录中
└── nginx \\角色名称
├── default \\为当前角色设定默认变量时使用此目录,应当包含一个main.yml文件;
├── files \\存放有copy或script等模块调用的文件
├── handlers \\此目录总应当包含一个main.yml文件,用于定义各角色用到的各handler
├── meta \\应当包含一个main.yml,用于定义角色的特殊设定及其依赖关系;1.3及以后版本支持
├── tasks \\至少包含一个名为main.yml的文件,定义了此角色的任务列表,可使用include指令
├── templates \\template模块会自动在此目录中寻找Jinja2模板文件
└── vars \\应当包含一个main.yml文件,用于定义此角色用到的变量