551 字
3 分钟
页面浏览--访问次数--
Ansible学习笔记(2)

关于Role#

用我的理解来说,你写了一个安装和配置 httpd 的 Playbook,里面有一堆任务、变量和模板,Role 就是把这些东西打包成一个“积木包”。以后想装 httpd,直接拿来用就行,还可以灵活向里面修改添加变量以适应需求

下面列出一个role的文件结构

roles/
└── httpd/ # Role 的名字叫 httpd
├── defaults/ # 默认变量 —— 优先级最低,最容易被覆盖
├── vars/ # 强变量 —— 优先级高,不容易被覆盖
├── tasks/ # 核心:要做的每一步动作
├── handlers/ # 触发器
├── templates/ # 模板文件:里面有 {{变量}},会动态生成真实文件
├── files/ # 普通文件:直接拷贝,不做变量替换
└── meta/ # 元信息:作者、依赖关系等(可选)

下面拿出上篇文章中安装http服务的案例,用role实现

defaults/main.yml

httpd_port: 8080
student_name: "张三"
student_id: "20240001"

tasks/main.yml

- name: 安装 httpd 软件包
yum: name=httpd state=present
- name: 复制配置文件模板
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
- name: 复制首页模板
template: src=index.html.j2 dest=/var/www/html/index.html
- name: 启动并开机自启
service: name=httpd state=started enabled=yes

handlers/main.yml

- name: restart httpd
service: name=httpd state=restarted

templates/httpd.conf.j2

# 全局环境
ServerRoot "/etc/httpd"
Listen {{ httpd_port }}
User apache
Group apache
ServerAdmin root@localhost
ServerName localhost:{{ httpd_port }}
# 加载 MPM 模块(通过主配置文件加载,不依赖 conf.modules.d)
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# 加载其他必需模块
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule dir_module modules/mod_dir.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule unixd_module modules/mod_unixd.so
# 文档根目录
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# 默认首页
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
# 日志配置
ErrorLog "logs/error_log"
CustomLog "logs/access_log" combined
# MPM 配置(prefork 默认值)
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 256
MaxConnectionsPerChild 3000
</IfModule>

templates/index.html.j2

<h1>Welcome</h1>
<p>Name: {{ student_name }}</p>
<p>ID: {{ student_id }}</p>

添加完以上文件后,这个role的文件结构应该是这样

roles/
└── httpd/
├── defaults/
│ └── main.yml
├── vars/
│ └── main.yml
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── templates/
│ ├── httpd.conf.j2
│ └── index.html.j2
└── meta/

如果调用这个role? 新疆一个playbook文件 text.yml

---
- name: 用role装httpd
hosts: webservers #对其进行操作的组
become: yes
roles:
- httpd #这里就是调用 roles/httpd

运行指令

ansible-playbook text.yml

这样就完成了role的编写与使用

Ansible学习笔记(2)
https://www.yisibuwang.top/posts/2026-04-21-ansible学习笔记2/
作者
不旺の博客
发布于
2026-04-21
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

评论

正在加载评论...

最后更新于 ,距今已过 165 天

部分内容可能已过时