一、定位与目标读者
《Ansible Playbook Essentials》是一本面向已有 Ansible 基础、具备 Linux/Unix 运维经验的中高级自动化工程师的实践指南。全书以“从入门到生产级”为主线,循序渐进地演示如何编写可维护、可复用、数据驱动的 Playbook,最终实现多环境、零停机的复杂基础设施编排。
二、内容结构总览
全书共 10 章,外加 1 个附录,覆盖以下四大主题:
| 模块 | 关键词 | 说明 |
|---|---|---|
| 基础与开发环境 | YAML、Inventory、Module、Idempotence | 快速上手,构建 5 台虚拟机(控制节点、DB-Ubuntu、DB-CentOS、Web、LB) |
| 模块化与复用 | Roles、Include、Templates、Variables、Vault | 将基础设施拆分为 Roles,实现代码与数据分离,并加密敏感信息 |
| 控制与迭代 | Conditionals、Loops、Node Discovery、Facts Caching | 使用 when、with_*、Magic Variables 实现条件执行、循环、集群节点发现 |
| 环境与编排 | Environment Management、Orchestration、Rolling Update | 创建 dev/stage/prod 多环境,使用 Tags、Limits、Pre/Post Tasks 完成零停机发布 |
三、章节重点提炼
第 1 章 Blueprinting Your Infrastructure
- 用 YAML 编写首个 Playbook:创建用户、安装 htop、配置 Nginx
- 引入 Inventory、Pattern、Task、Module、Handler 等核心概念
- 通过
--check
与 --diff
验证 Idempotence
第 2 章 Going Modular with Ansible Roles
- Roles 目录规范:tasks、handlers、vars、defaults、files、templates、meta
- 使用
site.yml
+ include
实现嵌套 Playbook
- 通过 meta/main.yml 声明 role 依赖,自动触发 base → nginx 的执行顺序
第 3 章 Separating Code and Data
- Jinja2 模板语法
{{ }}
、{% %}
与变量优先级(defaults < vars < group_vars < host_vars < playbook 参数 < -e 变量)
- Facts(自动发现)与 Variables(用户定义)并用,实现跨平台 MySQL 配置
- 使用 Ansible-Galaxy 初始化 role,快速生成脚手架
第 4 章 Bringing In Your Code
- 命令模块对比:raw(无 Python)、command(推荐)、shell(支持管道)、script(本地脚本上传到远端执行)
- 部署 WordPress 实战:wget 下载、tar 解压、creates/removes 控制幂等性、register 变量输出重用
- 将自定义脚本纳入 Ansible 体系而不重写
第 5 章 Controlling Execution Flow
when
条件判断:基于变量、注册结果、Facts 运行或跳过任务
- Jinja2 模板中的
if/else
与变量是否存在判断
- 通过布尔变量与多级字典实现 MySQL Server/Client 选择性安装
第 6 章 Iterative Control Structures
- 使用
with_items
、with_dict
、with_nested
等循环构造批量创建用户、数据库、虚拟主机
- 数组与哈希的组合实践:php5-fpm 多包安装、Nginx 多站点配置
- 通过变量驱动循环,避免硬编码
第 7 章 Node Discovery and Clustering
- Magic Variables:
groups
、hostvars
、inventory_hostname
、play_hosts
- 构建 haproxy role:自动发现
groups['www']
的所有主机并生成后端配置
- Facts 缓存:Redis 或 JSON 文件,解决跨 Play 无法获取非本组主机信息的问题
第 8 章 Encrypting Data with Vault
- Ansible-vault 使用 AES-256 对称加密变量、凭据、SSL 私钥
- 子命令:create、edit、encrypt、decrypt、rekey
- 将加密后的变量嵌入模板,实现 SSL 证书安全下发
第 9 章 Managing Environments
- 两种环境隔离方案:
- 嵌套组
[dev:children] web db
+ 环境级 group_vars
- 独立 inventory 目录(environments/{dev,stage,prod}),每个目录含 inventory 与 group_vars
- 通过
-i environments/dev
一键切换环境变量,实现同一套 Role、不同配置
第 10 章 Orchestrating Infrastructure
- Ansible 作为编排引擎:多 Playbook、Pre/Post Tasks、Delegation、Rolling Update
- 使用
serial: 1
实现单台滚动;wait_for
、uri
模块做健康检查
- Tags & Limits:只执行指定标签或主机子集,实现灰度发布
- 实战:update.yml 零停机更新 WordPress,步骤:
- Pre Task:从 haproxy 注销节点
- Roles:更新 Nginx、php5-fpm、WordPress
- Post Task:健康检查通过后重新注册节点
四、特色与收获
- 100% 实战导向:每章均提供可运行的示例代码,按章节递增,最终形成完整的多层架构(LB+Nginx+PHP+MySQL)。
- 最佳实践:目录结构、变量优先级、敏感数据加密、环境隔离、滚动发布等经验可直接复制到企业生产环境。
- 工具链整合:VirtualBox + Vagrant 一键搭建实验环境;Ansible-Galaxy 复用社区 Roles;Vault 与 Git 协同管理机密。
五、适用场景
- 希望用 Ansible 标准化开发、测试、生产三套环境的中大型团队
- 需要将现有脚本或手工流程迁移到可审计、可回滚、可扩展的自动化体系
- 计划实现零停机发布、蓝绿部署或金丝雀发布的 DevOps 场景
阅读完《Ansible Playbook Essentials》,你将获得从单机自动化到跨数据中心编排的完整方法论,以及可直接落地的代码模板。