Ansible Playbook Essentials
作者: Gourav Shah
语言: 英文
出版年份: 2015
下载链接:
书籍均收集自互联网,仅供学习和研究使用,请莫用于商业用途。谢谢合作。

书籍摘要

一、定位与目标读者

《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_itemswith_dictwith_nested 等循环构造批量创建用户、数据库、虚拟主机
  • 数组与哈希的组合实践:php5-fpm 多包安装、Nginx 多站点配置
  • 通过变量驱动循环,避免硬编码

第 7 章 Node Discovery and Clustering

  • Magic Variables:groupshostvarsinventory_hostnameplay_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

  • 两种环境隔离方案:
    1. 嵌套组 [dev:children] web db + 环境级 group_vars
    2. 独立 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_foruri 模块做健康检查
  • Tags & Limits:只执行指定标签或主机子集,实现灰度发布
  • 实战:update.yml 零停机更新 WordPress,步骤:
    1. Pre Task:从 haproxy 注销节点
    2. Roles:更新 Nginx、php5-fpm、WordPress
    3. Post Task:健康检查通过后重新注册节点

四、特色与收获

  • 100% 实战导向:每章均提供可运行的示例代码,按章节递增,最终形成完整的多层架构(LB+Nginx+PHP+MySQL)。
  • 最佳实践:目录结构、变量优先级、敏感数据加密、环境隔离、滚动发布等经验可直接复制到企业生产环境。
  • 工具链整合:VirtualBox + Vagrant 一键搭建实验环境;Ansible-Galaxy 复用社区 Roles;Vault 与 Git 协同管理机密。

五、适用场景

  • 希望用 Ansible 标准化开发、测试、生产三套环境的中大型团队
  • 需要将现有脚本或手工流程迁移到可审计、可回滚、可扩展的自动化体系
  • 计划实现零停机发布、蓝绿部署或金丝雀发布的 DevOps 场景

阅读完《Ansible Playbook Essentials》,你将获得从单机自动化到跨数据中心编排的完整方法论,以及可直接落地的代码模板。

期待您的支持
捐助本站