你指的应该是 Ansible Roles(角色) 的使用方法。下面我用清晰、实用的方式给你讲一下。
Role(角色) 是 Ansible 中用于组织和复用任务的一种方式。
它把 playbook、变量、文件、模板、处理器等按固定目录结构分开,便于维护和复用。
一句话:
Role = 结构化的“功能模块”
roles/
└── nginx/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── templates/
│ └── nginx.conf.j2
├── files/
│ └── index.html
├── vars/
│ └── main.yml
├── defaults/
│ └── main.yml
├── meta/
│ └── main.yml
└── README.md
| 目录 | 作用 |
|---|---|
| tasks | 核心任务(必须) |
| handlers | 触发器(如重启服务) |
| templates | Jinja2 模板 |
| files | 静态文件 |
| vars | 高优先级变量 |
| defaults | 默认变量(最低优先级) |
| meta | 角色依赖和元信息 |
ansible-galaxy init nginx
会生成完整目录结构。
site.yml
roles/nginx/
---
- hosts: webservers
become: yes
roles:
- nginx
运行:
ansible-playbook site.yml
roles/nginx/tasks/main.yml
---
- name: Install nginx
apt:
name: nginx
state: present
- name: Copy config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart nginx
roles/nginx/handlers/main.yml
---
- name: Restart nginx
service:
name: nginx
state: restarted
roles:
- role: nginx
vars:
nginx_port: 8080
或在 defaults/main.yml 中定义默认值。
roles/nginx/meta/main.yml
dependencies:
- role: common
✅ 一个 Role 只做一件事
✅ 使用 defaults 提供默认值
✅ 使用 vars 覆盖关键配置
✅ Role 名要语义化(nginx / docker / mysql)
✅ 复杂项目用 roles + playbook 分层
❌ 把 Role 写成“大杂烩”
❌ 在 Role 里写死 IP
❌ 不使用 handlers
❌ Role 和 playbook 混在一起
如果你愿意,我可以:
你更想了解哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。