Roles 将功能集以文件夹方式模块化后,使代码更为整洁,更为灵活,复用性也更高,变量的调用方式、Roles 的命名方式等使其在架构
上更为规范化,在复杂度较高的项目中体现得更加明显
roles结构
|
|
展示了两个功能齐全的Roles,分别为 common 和 webservers, 每个 Roles 均包括 files、templates、tasks、handlers、vars、
defaults、meta。在 Playbooks 中的调用方式如下:
说明
roles/x/tasks/main.yml
主函数,包括其中的所有任务将被执行
roles/x/handlers/main.yml
所有包括其中的handlers将被执行
roles/x/vars/main.yml
所有包括在其中的变量将在roles中生效
roles/x/meta/main.yml
roles 所有依赖将被正常登入
roles/x/{files, templates, tasks}/(dir depends on task)
所有文件、模板都可存放在该这里,放在这里最大的好处是不用指定绝对路径(直接使用文件名,就会找到目录files下的对应文件)。
案例
当 Apache 的配置文件发生变化时重启 Apache 进程。
目录总览
|
|
目录结构需按要求编排,不得随意变更名称。
vim roles/apache/handlers/main.yml
|
|
该 YML 要实现的功能非常简单:重启 Apache 进程。
vim roles/apache/tasks/restart.yml
|
|
该 YML 功能为更新 Apache 配置文件,如配置文件有变化则重启Apache。
vim roles/apache/tasks/main.yml
|
|
vim roles/apache.yml
|
|
该 YML 为总调度文件,完成 Apache 配置文件的变更和 Apache 的重启工作。
运行
|
|
命令运行结果为更新 Apache 配置文件,如配置文件有更新则重启 Apache,如无错误返回为正常。
files
Files 和 Templates 均用于 Ansible 文件处理,两者主要区别是:Files(不是 file 模块)目录下的文件无需写绝对路径即可将文件传
输至远程主机; Templates 目录下的文件以 Jinja2 渲染, 且传输文件至远程主机的同时支持预定义变量替换。
案例场景:
将 example role 下的 MAGEDU.PPT 和 STANLEY.PPT 两个文件传输至远程, 并修改文件名为英文小写。
目录
|
|
MAGEDU.PPT、STANLEY.PPT
MAGEDU.PPT 内容如下:
This is magedu. ppt file.
STANLEY.PPT 内容如下:
This is stanley.ppt file.
vim roles/file.yml
|
|
vim roles/example/tasks/file.yml
这里的src后面跟的文件并没有加上绝对路径,就可以直接访问到 roles/example/files/ 目录下的文件
vim roles/example/tasks/main.yml
|
|
###执行
在 roles 目录同级目录下执行命令:
templates
Templates 常被用作传输文件,同时支持预定义变量替换。因Templates由 Jinja2 渲染格式,所以介绍 Templates 前先来了解Jinja2。
Jinja2 是什么? Jinja2 是一个 Python 的功能齐全的模板引擎。它有完整的 Unicode 支持, 一个可选的集成沙箱执行环境,被广泛使用,以 BSD 许可证授权。
案例场景:
将 order.j2 分发至远程主机/data/{{ PROJECT }}/ 目录下,并改名为 order.conf,
且替换配置文件中变量为对应的值。
目录
|
|
该目录结构下,order.j2 模板文件必须存放于 templates 目录下, main.yml 变量文件存放于 vars 目录下。template.yml 和 main.yml任务执行文件存放于 tasks 目录下。目录结构及命名方式不得随意变更。
vim roles/templates.yml
|
|
该 YML 文件是任务总调用文件, 主要指定远程主机、 执行用户、 调用的 roles 等, 相当于”总指挥”的角色。
vim roles/template/tasks/main.yml
|
|
vim roles/template/tasks/template.yml
src 直接获取roles/template/templates/ 目录下的order.j2文件
{{PROJECT}} 的变量引用方式即前面提到的 Jinja2 格式。 源文件是 order.j2, 远程目录及目的文件
名分别是/data/{{ PROJECT}}/ 和 order.conf。
vim roles/template/templates/order.j2
|
|
vim roles/templte/vars/main.yml
|
|
执行
|
|
然后登录远程主机 192.168.37.142, 检查文件是否正常下发, 以及模板中的变量是否被正常替换。