Ansible Playbook 中通过 pause 模块实现人工确认暂停,支持提示信息、超时控制(seconds)、输入校验(echo: yes)及条件触发(when),常用于高危操作前把关,并可结合 serial 滚动更新分批确认。

在 Ansible Playbook 中实现人工确认暂停,主要靠 pause 模块。它不会自动跳过,而是阻塞执行、等待操作者输入(如按回车或输入特定值),常用于高危操作前的二次把关,比如数据库迁移、生产环境重启或配置变更。
基本用法:简单暂停并提示
最简形式只需指定提示文字,执行时会暂停并显示信息,用户按回车继续:
- name: 确认是否继续部署
pause:
prompt: "即将更新生产数据库,请确认(回车继续)"
该任务不依赖条件,默认执行;适合固定需要人工介入的环节。
带超时和输入校验的确认
可设置超时时间,避免无限等待;也可要求输入特定值(如 yes)来防止误触:
- name: 高危操作二次验证
pause:
prompt: "确认执行全量备份?输入 'yes' 继续,30秒后自动中止"
seconds: 30
echo: yes
-
seconds:超过设定秒数无输入则报错退出 -
echo: yes表示显示用户输入内容(默认隐藏,适合密码类场景) - 输入非
yes(如直接回车或输错)也会中断执行
结合 when 条件动态触发暂停
不是所有环境都需要确认。可以用 when 控制只在特定条件下暂停,例如仅对生产主机或特定角色生效:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- name: 生产环境发布前确认
pause:
prompt: "【PROD】即将重启服务,确认继续?"
when: "'prod' in group_names"
这样测试机、开发机自动跳过,避免干扰日常调试。
与滚动更新配合使用
在 serial 分批执行时,可在每批完成后插入确认,确保上一批稳定后再推进:
- name: 滚动更新应用
hosts: app_servers
serial: 2
tasks:
- name: 停止旧服务
service:
name: myapp
state: stopped
<pre class="brush:php;toolbar:false;">- name: 部署新版本
copy:
src: ./dist/
dest: /opt/myapp/
- name: 启动新服务
service:
name: myapp
state: started
- name: 等待人工确认再处理下一批
pause:
prompt: "已更新2台,确认无误后按回车继续下一批"
when: inventory_hostname == groups['app_servers'] | last这里利用 last 判断当前是否为本批次最后一台,只在该节点上触发确认,逻辑清晰且不冗余。










