ansible——roles综合案例

① 简介

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

roles目录结构
playbook.yml
roles 这2个是平级关系,都在ansible目录下

② 角色集合

/roles/project/:项目名称,有以下目录

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的文件,用于设定默认变量;

[[email protected] ansible]# cd ansible/
[[email protected] ansible]# mkdir roles/httpd/{files,tasks} -pv
[[email protected] httpd]# cp /etc/httpd/conf/httpd.conf files/

③ 角色定制实例

综合实验:在被控端利用roles装服务
ansible——roles综合案例

[[email protected] ansible]# mkdir roles/app/{files,handlers,tasks,templates,vars} -p
[[email protected] app]# touch files/vhosts.conf
注意copy的源文件在files目录下,template的源文件在templates目录下
task下的playbook:
ansible——roles综合案例

main.yml里指明执行的顺序
ansible——roles综合案例

tasks下的teml脚本里的template模块里的src的来源,来源于templatea/httpd.conf.j2
ansible——roles综合案例
ansible——roles综合案例
ansible——roles综合案例

ansible——roles综合案例

ansible——roles综合案例
被控端查看:
ansible——roles综合案例