一、为什么要通过案例练习 Playbook

剧本的价值不在于“能写一个 YAML 文件”,而在于把实际运维步骤拆解成可执行、可复用的任务链。

原始笔记给出的两个案例非常典型:

  • 批量创建目录并分发文件
  • 批量安装软件包并启动服务

这两类任务几乎覆盖了 Ansible 入门阶段最常见的使用场景。

二、案例一:创建目录并分发文件

2.1 先拆解任务步骤

原始笔记把这个案例拆成了两步:

1、创建目录 /server/files/ 2、把 /etc/hosts 文件分发到这个目录

这种“先拆步骤、再写剧本”的思路非常重要,因为它能帮你把复杂操作变成清晰的任务列表。

2.2 Playbook 示例

- hosts: all
  tasks:
    - name: 01 创建目录
      file:
        path: /server/files
        state: directory
    - name: 02 分发文件
      copy:
        src: /etc/hosts
        dest: /server/files

这个剧本里最值得关注的是两个模块:

  • file:用于创建目录
  • copy:用于分发文件

2.3 执行剧本

ansible-playbook 02.dist_file.yml

2.4 如何验证结果

原始笔记使用下面的方式验证:

ansible all -a 'ls -l /server/files/'

如果每台目标主机下都能看到 hosts 文件,说明目录创建和文件分发都已经成功。

三、案例二:分发软件包、安装软件包并启动服务

这个案例比前一个更贴近真实运维场景,因为它不只是“分发一个静态文件”,而是完整覆盖了:

  • 下载软件包
  • 安装软件包
  • 配置
  • 启动服务并设置开机自启

3.1 先做环境检查

原始笔记建议先检查目标主机是否已经安装过 zabbix-agent

ansible all -a 'rpm -qa zabbix-agent'

如果已安装,可以先卸载:

ansible all -a 'rpm -e zabbix-agent'

这一步的意义在于保证剧本测试环境尽量干净,避免旧状态影响验证结果。

3.2 Playbook 示例

- hosts: all
  tasks:
    - name: 01.下载软件包/tmp/
      get_url:
        url: "https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent-6.0.7-1.el7.x86_64.rpm"
        validate_certs: no
        dest: /tmp/
    - name: 02. 安装软件包
      yum:
        name: /tmp/zabbix-agent-6.0.7-1.el7.x86_64.rpm
        state: present
    - name: 03. 配置
      debug:
        msg: "进行配置zabbix-agent"
    - name: 04. 启动
      systemd:
        name: zabbix-agent
        enabled: yes
        state: started

3.3 这个案例里涉及哪些模块

3.3.1 get_url

用于从指定 URL 下载软件包到目标主机。

3.3.2 yum

用于通过 RPM 路径安装软件包,状态设为:

  • present

表示确保软件已安装。

3.3.3 debug

这里用来占位演示“配置步骤”,虽然没有真正修改配置,但在剧本设计上保留了这个步骤位置。

3.3.4 systemd

用于:

  • 启动服务
  • 设置开机自启

这在服务部署类剧本里几乎是必会模块。

3.4 执行剧本

ansible-playbook 03.install-zabbix-agent.yml

3.5 验证结果

原始笔记通过查询 RPM 包验证:

ansible all -a 'rpm -qa zabbix-agent'

只要目标主机返回:

  • zabbix-agent-6.0.7-1.el7.x86_64

就说明安装已经成功完成。

四、从这两个案例中应该学会什么

这两个案例虽然简单,但已经覆盖了很多 Ansible 入门阶段的核心能力:

  • 使用 file 模块管理目录
  • 使用 copy 模块分发文件
  • 使用 get_url 下载资源
  • 使用 yum 安装软件
  • 使用 systemd 管理服务
  • 使用 debug 输出调试信息

更重要的是,它们都体现了一个共同思路:

  • 先拆步骤,再编排任务,再验证结果

五、为什么“验证结果”在 Playbook 学习里很重要

原始笔记每个案例都专门安排了“结果验证”步骤,这一点非常值得保留。

因为 Playbook 的目标不是“命令执行了”,而是:

  • 目标状态真的达成了

例如:

  • 目录是否真的创建
  • 文件是否真的分发
  • 软件是否真的安装
  • 服务是否真的启动

只有验证闭环完成,自动化才算真正可靠。

六、小结

通过这两个案例,初学者最值得先掌握的能力包括:

  • 会用 Playbook 做多步骤任务编排
  • 会用 filecopyget_urlyumsystemd 等基础模块
  • 会把部署任务拆成清晰的步骤
  • 会在执行后做结果验证

当这些基础能力掌握后,后面的服务自动化部署和复杂剧本编排就会轻松很多。