在 Ansible 中,Roles(角色) 是一种模块化、结构化的组织方式,用于将复杂的 Playbook 拆分为多个独立的 “功能单元”(如 “部署 Nginx”“配置数据库”“安装 ELK” 等)。它通过固定的目录结构,将任务、变量、模板、文件等按功能分类存放,让代码更清晰、更易复用和维护,尤其适合大型项目、团队协作或需要跨项目复用的场景。
为什么需要 Roles?
jsroles/
└── elasticsearch/ # 角色名称(比如“部署 Elasticsearch”的角色)
├── tasks/ # 核心任务(必须有,存放要执行的任务列表)
│ └── main.yml # 任务入口文件(Ansible 会自动加载)
├── handlers/ # 处理器(存放被 notify 触发的任务,如重启服务)
│ └── main.yml
├── vars/ # 角色专属变量(优先级较高,通常不允许用户修改)
│ └── main.yml
├── defaults/ # 角色默认变量(优先级较低,允许用户在外部覆盖)
│ └── main.yml
├── templates/ # 模板文件(带变量的配置文件,如 elasticsearch.yml.j2)
├── files/ # 静态文件(无需渲染的文件,如证书、脚本)
└── meta/ # 角色元信息(如作者、依赖关系)
└── main.yml
js# 创建项目根目录
mkdir -p ~/nginx_role_demo
cd ~/nginx_role_demo
# 创建Roles及子目录(nginx为角色名)
mkdir -p roles/nginx/{tasks,handlers,templates,defaults,files}
# 最终目录结构如下
tree .
.
├── roles/
│ └── nginx/ # 角色名:部署Nginx
│ ├── tasks/ # 任务列表(核心)
│ ├── handlers/ # 处理器(重启服务等)
│ ├── templates/ # 模板文件(带变量)
│ ├── defaults/ # 默认变量(可被覆盖)
│ └── files/ # 静态文件(可选)
└── deploy_nginx.yml # 主Playbook:调用角色
本文作者:松轩(^U^)
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!