学习自动化时,能重复执行而不反复制造变化,比把所有命令放进一个大脚本更重要。本篇梳理任务、模板与 Handler 的关系。
学习整理:2026-10-29。以下命令、地址和账号均为课程实验示例,按实际环境替换;涉及安装、覆盖配置或服务启停的操作先在隔离环境练习,不代表本站已经实施。
一、Playbook
- name: Configure web servers
hosts: web
become: true
tasks:
- name: Install nginx
ansible.builtin.dnf:
name: nginx
state: present
- name: Deploy configuration
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: "0644"
validate: "/usr/sbin/nginx -t -c %s"
notify: Reload nginx
- name: Ensure nginx is running
ansible.builtin.systemd_service:
name: nginx
enabled: true
state: started
handlers:
- name: Reload nginx
ansible.builtin.systemd_service:
name: nginx
state: reloaded二、幂等性
同一个Playbook重复执行,若目标已经符合预期,应尽量不产生changed。幂等性使自动化可安全重复。
验证:
ansible-playbook -i inventory.ini site.yml --syntax-check
ansible-playbook -i inventory.ini site.yml --check --diff
ansible-playbook -i inventory.ini site.yml
ansible-playbook -i inventory.ini site.ymlCheck模式不是完整模拟,某些模块或后续依赖可能与真实执行不同。
三、Role结构
roles/nginx/
├── defaults/main.yml
├── tasks/main.yml
├── handlers/main.yml
├── templates/nginx.conf.j2
├── files/
└── README.md四、批量变更安全
- limit先限制一台主机。
- serial控制分批数量。
- any_errors_fatal根据场景决定是否全局停止。
- 配置使用validate。
- 变更前备份。
- 执行后做健康检查。
- 失败有回滚Playbook。
ansible-playbook -i inventory.ini site.yml --limit ops02我的验收重点
先说清每个组件和参数解决的问题,再在实验环境记录正常结果、错误现象与恢复步骤。配置能通过语法检查只是起点,还应验证实际功能。本文保留为学习笔记,不把计划中的多机部署或演练写成本站完成记录。
模板校验的一个边界
示例 nginx.conf.j2 必须是包含 events 和 http 等所需上下文的完整主配置,才适合用 nginx -t -c 校验。不能把单个 server 片段当成主配置。模板内容、发行版路径和依赖文件应先在实验机核对;check 模式也不能代替真实功能测试。
补齐模板与 Handler 的执行前提
Playbook 使用完整 nginx.conf.j2 时,模板必须实际存在且包含所需 events/http 上下文;若改为单个 server 片段,应设计包含它的校验主配置。notify 仅在任务 changed 时触发 Handler,通常在对应阶段结束运行,不能假设模板一写完即已重载。先 --syntax-check,再限定实验主机 --check --diff,最后真实执行两次验证幂等与 HTTP 结果。
完整模板的最小实验内容
项目根目录创建 templates/nginx.conf.j2,配合本文 site.yml 使用。仅限新的隔离实验机:该模板替换主配置,不适合直接覆盖本站 HTTPS 配置。
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
events { worker_connections 256; }
http {
include /etc/nginx/mime.types;
server {
listen 127.0.0.1:18081;
location / { return 200 "ansible lab ok\n"; }
}
}目标机已有 nginx 包、标准目录、对应路径且端口空闲时才执行。启动后在目标机 curl http://127.0.0.1:18081/ 验证,不能只看 Playbook 的绿色汇总。实验前保留原主配置与服务状态,回退时恢复原配置、检查语法并重新加载。
内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
评论 (0)