核心定义:Role 是 Ansible 中用于组织自动化任务的模块化目录结构,将变量、任务、模板、文件等按功能拆分,实现代码复用、逻辑解耦和标准化部署。
核心特点
• 结构化目录:固定目录树(如 tasks/vars/templates 等),Ansible 自动识别加载,无需手动指定路径。
• 高复用性:可在多个项目、剧本(Playbook)中直接调用,避免重复编写任务。
• 易维护:按功能拆分(如 nginx_role/mysql_role),逻辑清晰,便于团队协作和版本控制。
• 支持依赖:可通过 meta/main.yml 定义角色依赖,自动按顺序执行依赖角色。
典型角色目录结构
nginx_role/ # 角色名称(通常与功能对应)
├── tasks/ # 核心任务(必须,main.yml 为入口)
├── vars/ # 角色专属变量(main.yml 为入口)
├── defaults/ # 默认变量(优先级最低,可被覆盖)
├── templates/ # 模板文件(如配置文件模板)
├── files/ # 静态文件(如二进制包、脚本)
├── handlers/ # 触发式任务(如服务重启,需配合 notify)
└── meta/ # 角色元信息(如依赖、作者、版本)
核心使用场景
• 标准化中间件部署(如 Nginx、MySQL、Redis 等,一个服务对应一个角色)。
• 拆分复杂 Playbook(将不同功能模块拆分为独立角色,Playbook 仅负责调用)。
• 团队共享自动化资产(通过 Git 管理角色库,供所有项目复用)。