一、为什么剧本调试能力很重要¶
原始笔记把剧本调试拆成了三类高频需求:
- 检查语法与单步执行
- 使用 tag 标签选择性运行任务
- 忽略某些错误,避免剧本中途退出
这说明写 Playbook 不只是“能执行”,还要学会:
- 先检查
- 再试跑
- 定位问题
- 控制执行范围
二、检查模式与语法检查怎么用¶
原始笔记中提到三种非常实用的调试参数。
2.1 -C / --check¶
作用:
- 模拟运行
- 不真正修改目标主机
原始笔记特别提醒:
- 有些依赖真实执行结果的变量,在
-C下可能会报错
因为检查模式本质上没有真正完成任务。
2.2 --syntax-check¶
作用:
- 只检查剧本语法
- 不执行任务
这非常适合在正式运行前先做 YAML 和 Playbook 结构校验。
2.3 --step¶
作用:
- 单步执行剧本
原始笔记给出的交互方式包括:
y:执行当前 taskn:跳过当前 taskc:后续自动连续运行
这在排查复杂剧本时非常有帮助。
三、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 调试能力的核心,不是死记参数,而是养成一种更稳的执行习惯:
- 先检查语法
- 再模拟运行
- 再按标签缩小范围
- 必要时单步执行
- 谨慎使用忽略错误
把这套思路掌握之后,写更复杂的自动化剧本时,排错效率会明显提升。