目录 - 角色的使用
利用角色简化 playbook
ansible可以自定义模块以便于调用,它也有一个特有的名称叫做角色
每个角色对应的服务可能不太一样,比如mysql,httpd,nginx,memcached
虽然每个角色(模块)的功能不一样,但是他们都以特定的目录结构进行组织。
1. ansible 角色优点
1.角色可以把内容分组,容易复用
2.可以用角色定义系统基本信息:web 服务器、数据库服务器等
3.角色可以使大型项目易管理
4.角色可以由不同人并行开发
ansible 角色会把不同功能的 playbook 分开,一个标准的角色含有下列子目录
defaults | 其中的 main.yml 包含角色变量的默认值 |
---|---|
files | 包含角色任务引用的静态文件 |
handlers | 主要定义处理程序 |
meta | 角色相关信息,如作者、许可证等 |
tasks | 定义任务 |
templates | 任务引用的 jinja2 模板 |
tests | 可以包含清单和 test.yml 的 playbook,用于测试 |
vars | 定义角色的变量 |
注: defaults在所有变量中优先级最低
2. 在 playbook 中使用 ansible 角色
2.1 示例
---
- hosts: www.example.com
roles:
- role1
- role2
var1:var1
var2:var2
为 role2 定义了两个变量,任何 defaults 和 vars 中的变量都会被覆 盖
2.2 控制执行顺序
有时需要在角色之前或之后执行一些任务
关键字:
之前:pre_tasks
之后:post_tasks
2.3 利用系统角色重用内容
2.4 时间同步角色示例
2.5 时区设置的 example
3. 创建角色
3.1 角色创建流程
三个步骤
1.创建角色目录结构
2.定义角色内容
3.在 playbook 中使用角色
3.2 创建角色框架
[root@work roles]# tree my_role
my_role 具体的角色项目名称,比如 nginx、tomcat、php(自由设置)
├── defaults 用于为当前角色设定默认变量,此目录应当包含一个 main.yml 文件
│ └── main.yml main.yml,类似代码中的主函数,进行统一管理
├── files 用来存放由 copy 模块或 script 模块等模块调用的文件
├── handlers 用于定义此角色中触发条件时执行的动作,此目录应当包含一个
│ └── main.yml
├── meta 用于定义此角色的特殊设定及其依赖关系,此目录应当包含一个
│ └── main.yml
├── README.md 说明文件
├── tasks 用于定义当前角色的任务列表,此目录应当包含一个 main.yml 文件
│ └── main.yml
├── templates 用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件
├── tests 用于存放测试 role 本身功能的 playbook 和主机定义文件,在开发测 试阶段比较常用,此目录应当包含一个 main.yml 文件和自身资源设定 invetory
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml 用于定义此角色用到的变量,此目录应当包含一个 main.yml 文件
8 directories, 8 files
3.3 练习
1. 创建并初始化
2. 配置 tasks 的 play
安装、启动和配置虚拟主机
3. 编写处理程序
4. 编写 html 文件
5. 配置模板
6. 编写roles的playbook
7. 运行
8. 测试