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装服务
[[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:
main.yml里指明执行的顺序
tasks下的teml脚本里的template模块里的src的来源,来源于templatea/httpd.conf.j2
被控端查看: