一、什么是 Ansible 剧本

原始笔记对剧本的定义非常直接:

  • Playbook 文件用于长久保存批量管理、维护和部署步骤
  • 它的作用类似脚本,只不过剧本里存放的是模块、任务和变量

这意味着,Ansible 剧本的核心价值不是“临时执行一条命令”,而是把一整套可重复执行的运维步骤沉淀为文件。

二、Playbook 和 ad-hoc 命令有什么区别

原始笔记给出了一个很清晰的对比:

对比项 Ansible 剧本 Ansible ad-hoc
共同点 都能做批量管理,也都调用模块 都能做批量管理,也都调用模块
区别 方便重复调用 不太方便重复使用
适用场景 部署服务、多个步骤的任务 测试模块、临时性任务

可以简单理解成:

  • ad-hoc 更像一次性命令
  • Playbook 更像可维护、可复用的自动化方案

三、为什么剧本是运维必会内容

原始笔记特别强调:

  • Playbook 是未来批量管理中运维必会的内容

原因很简单,真实环境中的运维任务很少只做一步,经常会出现这样的流程:

  • 安装软件
  • 修改配置
  • 分发文件
  • 启动服务
  • 验证结果

这种多步骤任务如果只靠 ad-hoc 一条一条敲,不仅效率低,还很难复用。Playbook 正是为了解决这个问题。

四、剧本为什么使用 YAML 格式

原始笔记提到,剧本文件使用的是 YAML 格式。它最重要的特点有两个:

  • 空格非常关键
  • 冒号写法要正确

YAML 并不复杂,但对格式要求很严格,所以初学者最容易出错的地方通常不是模块本身,而是缩进和对齐。

五、最基本的 Playbook 长什么样

原始笔记给出了一个经典示例,用“把大象放进冰箱”来演示多步骤剧本。

---
- hosts: all
  tasks:
    - name: 01 打开冰箱门
      shell: echo 01 >> /tmp/bingxiang.log
    - name: 02 把大象放入冰箱
      shell: echo 02 >> /tmp/bingxiang.log
    - name: 03 关上冰箱的门
      shell: echo 03 >> /tmp/bingxiang.log

这个示例非常适合入门,因为它完整体现了剧本最小结构:

  • hosts:定义对哪些主机执行
  • tasks:定义要执行的任务列表
  • name:给每个任务写说明
  • 模块调用:这里使用的是 shell

六、剧本的基本执行流程

原始笔记中的执行流程可以概括成三步。

6.1 编写剧本

例如先准备目录:

mkdir -p /etc/ansible/playbook/
cd /etc/ansible/playbook/

然后把剧本保存为 .yml.yaml 文件。

6.2 执行剧本

ansible-playbook 01.show.yml

6.3 验证结果

原始笔记中使用 ad-hoc 命令验证:

ansible all -a 'cat /tmp/bingxiang.log'

结果显示所有目标主机都按顺序写入了:

  • 01
  • 02
  • 03

这就说明整个多步骤剧本已经被批量执行成功。

七、写 Ansible Playbook 时最常见的格式注意事项

原始笔记最后总结了三条非常关键的规范:

  • 同一个层级的内容必须对齐
  • 不同层级通常通过 2 个空格缩进
  • 不能使用 Tab

这三条看起来简单,但几乎是 Ansible 初学阶段最容易踩坑的地方。很多“剧本执行报错”本质上并不是逻辑问题,而是 YAML 缩进问题。

八、为什么建议把简单任务也先写成剧本

虽然 ad-hoc 很方便,但只要你发现任务具备下面任意一个特征,就已经值得考虑写成 Playbook:

  • 会重复执行
  • 包含多个步骤
  • 需要交给别人复用
  • 未来还要继续补充和维护

这也是从“临时执行命令”走向“自动化运维”的关键一步。

九、小结

学习 Ansible 剧本时,最值得先掌握的几个点是:

  • Playbook 适合多步骤、可重复的批量任务
  • 它和 ad-hoc 的主要区别在于可复用性
  • YAML 的缩进和对齐必须严格
  • 一个最小剧本通常包含 hoststasksname 和模块调用
  • 剧本执行后要养成验证结果的习惯

把这些基础点先掌握之后,后面再学习文件分发、软件安装、服务部署和变量管理,就会顺很多。