mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5
184 字
1 分钟
Ansible学习笔记(2)
2026-04-21

关于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/
作者
buwang
发布于
2026-04-21
许可协议
CC BY 4.0

部分信息可能已经过时

相关文章 智能推荐
1
ansible学习笔记
笔记 ansible是一款开源的it自动化引擎,你可以把它理解成一个统一的指挥棒,用来管理成百上千台服务器。它的核心目标就是简单和易用,旨在消除重复性工作,简化复杂的工作流程,我会尽可能的记录学习到的功能并添加一些简单案例
2
Ansible学习笔记(1)
学习 Ansible是一款通过ssh来实现批量自动化的工具,理论上,只要能使用ssh完成的操作,Ansible都能做到,支持多类型主机且部署方便这里记录下自己学习此软件的笔记,会随学习进度更新
3
在windows上安装并简单配置wsl
学习 记得挺久之前微软在宣布更新windows11的时候,就说过wsa和wsl,分别是全程分别是 适用于android的windows子系统 和 适用于liunx的windows子系统,当时我也是因为wsa升级的win11,而wsl听说很垃圾就没有接触过,这几天在群里水群的时候看到有人在用这个,发现这个依旧更新到了2.0版本,据说是好用了很多,便试了试并记录
4
解决虚拟机无法共享宿主机Clash代理问题
踩坑记录 最近我想要在我的虚拟机上运行docker,但运行时却出现镜像容器pull不下来的问题,明明宿主机上的Clash开启了局域网连接,虚拟机内的系统也正确的配置了地址,但就是无法连接
5
博客已升级并对所有文章链接进行的更改
博客更改记录 博客已升级到mizuki V9.0,并进行了多项改动