角色结构
利用角色构造ansible playbook
随着开发更多的playbook,我们可能会发现有很多机会重复利用以前缩写的playbook中的代码。或许,一个用于为某一应用配置MySQL数据库的play可以改变用途,通过利用不同的主机名、密码和用户来为另一个应用配置MySQL数据库。
但在现实中,这个play可能比较冗长且复杂,有许多包含或导入的文件,以及用于管理各种情况的任务和处理程序。将所有这些代码复制到另一playbook中可能比较困难。
- Ansible角色具有下列优点:
- 角色可以分组内容,从而与他人轻松共享代码
- 可以编写角色来定义系统类型的基本要素:Web服务器、数据库服务器、Git存储库,或满足其他用途
- 角色使得较大型项目更容易管理
- 角色可以由不同的管理员并行开发
除了自行编写、使用、重用和共享角色外,还可以从其他来源获取角色。一些角色已包含在rhel-system-roles软件包中,用户也可以从Ansible Galaxy网站获取由社区提供支持的许多角色。
role结构
- Ansible角色由子目录和文件的标准化结构定义
- 顶级目录定义角色本身的名称
- 文件整理到子目录中,子目录按照各个文件在角色中的用途进行命名
以下tree命令显示了user.example角色的目录结构:
[root@localhost roles]# tree user.example/
user.example/ //角色的名字,自行设置
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
Ansible角色子目录
子目录 | 功能 |
---|---|
defaults | 此目录中的main.yml文件包含角色变量的默认值,使用角色时可以覆盖这些默认值。 这些变量的优先级较低,应该在play中更改和自定义。 |
files | 此目录包含由角色任务引用的静态文件 |
handlers | 此目录中的main.yml文件包含角色的处理程序定义 |
meta | 此目录中的main.yml文件包含与角色相关的信息,如作者、许可证、平台和可选的角色依赖项。 |
tasks | 此目录中的main.yml文件包含角色的任务定义 |
templates | 此目录包含由角色任务引用的Jinja2模板 |
tests | 此目录可以包含清单和名为test.yml的playbook,可用于测试角色 |
vars | 此目录中的main.yml文件定义角色的变量值。 这些变量通常用于角色内部用途。 这些变量的优先级较高,在playbook中使用时不应更改 |
注:并非每个角色都拥有所有这些目录。