Roles 的结构
roles/
<role_name>/
tasks/
main.yml
handlers/
main.yml
defaults/
main.yml
vars/
main.yml
files/
templates/
meta/
main.yml
-
tasks: 存放执行任务的 playbook 文件,定义了 Role 的主要功能。
-
handlers: 存放触发条件触发的 playbook 文件,例如在某个任务执行完成后重启服务。
-
defaults: 存放默认变量,这些变量可以在 Playbook 或其他 Role 中被覆盖。
-
vars: 存放自定义变量,用于定义 Role 的特定配置。
-
files: 存放需要传输到远程主机的文件,例如配置文件、脚本等。
-
templates: 存放 Jinja2 模板文件,可以根据变量生成动态内容。
-
meta: 存放角色的依赖信息,例如该 Role 依赖于其他哪些 Roles。
如何在 Playbook 中使用 Roles
在 Playbook 中使用 Roles 非常简单,只需使用 roles
关键字即可:
---
- hosts: webservers
roles:
- common
- webserver
这将会依次执行 common
和 webserver
这两个 Role 中的任务。
常用 Roles 实例
以下是一些常用的 Roles 实例,并附带相关的代码示例:
1. Web 服务器配置
该 Role 用于安装和配置 Web 服务器,例如 Nginx 或 Apache。
roles/
webserver/
tasks/
main.yml
handlers/
main.yml
defaults/
main.yml
vars/
main.yml
files/
nginx.conf
templates/
index.html.j2
tasks/main.yml
---
name: Install nginx
apt:
name: nginx
state: present
name: Copy nginx configuration file
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify:
Restart nginx
name: Copy index.html
template:
src: index.html.j2
dest: /var/www/html/index.html
notify:
Restart nginx
handlers/main.yml
---
name: Restart nginx
service:
name: nginx
state: restarted
2. 数据库服务器配置
该 Role 用于安装和配置数据库服务器,例如 MySQL 或 PostgreSQL。
roles/
database/
tasks/
main.yml
handlers/
main.yml
defaults/
main.yml
vars/
main.yml
files/
my.cnf
templates/
tasks/main.yml
---
name: Install MySQL
apt:
name: mysql-server
state: present
name: Copy MySQL configuration file
copy:
src: my.cnf
dest: /etc/mysql/my.cnf
notify:
Restart mysql
handlers/main.yml
---
name: Restart mysql
service:
name: mysql
state: restarted
3. 用户管理
该 Role 用于创建和管理用户账户。
roles/
user/
tasks/
main.yml
handlers/
main.yml
defaults/
main.yml
vars/
main.yml
files/
templates/
tasks/main.yml
---
- name: Create user account
user:
name: "{{ user_name }}"
state: present
groups: "{{ user_groups }}"
shell: /bin/bash
defaults/main.yml
---
user_name: john
user_groups: wheel
4. 文件传输
该 Role 用于将文件从控制节点传输到远程主机。
roles/
file_transfer/
tasks/
main.yml
handlers/
main.yml
defaults/
main.yml
vars/
main.yml
files/
test.txt
templates/
tasks/main.yml
---
name: Copy file to remote host
copy:
src: test.txt
dest: /tmp/test.txt
owner: root
group: root
mode: 0644
总结
希望本文能够帮助你更好地理解和使用 Ansible Roles。
原文始发于微信公众号(技术修道场):Ansible Playbook 中 Roles 的使用详解
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论