一、为什么剧本调试能力很重要

原始笔记把剧本调试拆成了三类高频需求:

  • 检查语法与单步执行
  • 使用 tag 标签选择性运行任务
  • 忽略某些错误,避免剧本中途退出

这说明写 Playbook 不只是“能执行”,还要学会:

  • 先检查
  • 再试跑
  • 定位问题
  • 控制执行范围

二、检查模式与语法检查怎么用

原始笔记中提到三种非常实用的调试参数。

2.1 -C / --check

作用:

  • 模拟运行
  • 不真正修改目标主机

原始笔记特别提醒:

  • 有些依赖真实执行结果的变量,在 -C 下可能会报错

因为检查模式本质上没有真正完成任务。

2.2 --syntax-check

作用:

  • 只检查剧本语法
  • 不执行任务

这非常适合在正式运行前先做 YAML 和 Playbook 结构校验。

2.3 --step

作用:

  • 单步执行剧本

原始笔记给出的交互方式包括:

  • y:执行当前 task
  • n:跳过当前 task
  • c:后续自动连续运行

这在排查复杂剧本时非常有帮助。

三、tag 标签是什么

原始笔记把 tag 比喻成“超市物品分类”,这个比喻很贴切。

本质上,tag 就是给 task 打标签,方便你在运行剧本时:

  • 只执行某一部分
  • 或排除某一部分

3.1 运行时常见参数

原始笔记列出了两个最常用参数:

  • -t:只运行指定标签
  • --skip-tags:跳过指定标签

如果有多个标签,可以用逗号分隔。

四、tag 案例:只运行某些 NFS 部署步骤

原始笔记用 NFS 部署剧本做了一个非常典型的 tag 示例。

4.1 剧本中的标签写法

例如:

- name: 01. 部署nfs-utils, rpcbind
  yum:
    name: nfs-utils,rpcbind
    state: present
  tags:
    - 01.install

再比如启动服务部分:

- name: 04. 启动服务rpcbind, nfs(注意顺序)
  systemd:
    name: "{{ item }}"
    enabled: yes
    state: started
  loop:
    - rpcbind
    - nfs
  tags:
    - 04.start_service

4.2 常见调试命令

列出剧本中所有标签

ansible-playbook --list-tags 14.deploy-nfs-tag.yml

只模拟执行某个标签

ansible-playbook -t 04.start_service -C 14.deploy-nfs-tag.yml

这样你就可以只验证“启动服务”这部分,而不必整套剧本从头到尾全跑一遍。

五、什么是 ignore_errors

原始笔记对它的使用场景解释得很实际:

  • 有些错误是因为重复执行导致的
  • 也有些错误属于预期范围内可接受的问题
  • 这时可以用 ignore_errors 让剧本继续往下执行

5.1 示例

原始笔记在 NFS 部署剧本里故意把服务名写错:

loop:
  - aaa
  - nf
ignore_errors: true

这样即使启动服务这一步出错,剧本仍然能继续执行后面的内容。

5.2 ignore_errors 适合什么时候用

更适合这些场景:

  • 调试阶段
  • 某些错误可接受,且不想中断整个流程

但它不能滥用,因为真正的错误被忽略后,也可能掩盖问题。

六、原始笔记中的剧本调试小结很实用

原始笔记最后总结了几类常见问题来源:

  • 常见是密钥认证问题
  • 常见还有剧本本身的问题

并建议优先从这些方向入手:

  • -C 模拟检查
  • tag 标签
  • --step 单步执行
  • ignore_errors

这几乎已经构成了 Playbook 调试的最小工具箱。

七、调试剧本时的一个推荐顺序

结合原始笔记内容,可以采用下面这套顺序:

1、先做 --syntax-check 2、再用 -C 模拟执行 3、如果剧本较大,用 -t 只跑关键部分 4、必要时用 --step 单步确认问题点 5、对部分可容忍错误视情况用 ignore_errors

这样比“一上来直接全量执行生产剧本”安全得多。

八、小结

Ansible 调试能力的核心,不是死记参数,而是养成一种更稳的执行习惯:

  • 先检查语法
  • 再模拟运行
  • 再按标签缩小范围
  • 必要时单步执行
  • 谨慎使用忽略错误

把这套思路掌握之后,写更复杂的自动化剧本时,排错效率会明显提升。