目标
每次重跑 playbook 都报告有变更,导致在生产上不敢运行。本配方用声明式模块替代 shell 任务,仅在内容不同时才重写文件,并让 handler 只在变更时触发,随后重跑并确认 changed=0,以证明幂等;同时提醒 command/shell 任务需加 creates 或 changed_when。
步骤要点
- 用声明式模块替代 shell 任务。
- 仅在内容变化时重写文件并触发 handler。
- 为 command/shell 任务加条件以避免误报变更。
- 重跑 playbook 并确认 changed=0。
- name: Configure service
template:
src: service.conf.j2
dest: /etc/app/service.conf
mode: '0644'
notify: restart app
排错提示
- handler 仅在变更时触发,任务未变更则不会重启服务。
- command 任务默认总是 changed,需加条件。
- 幂等不等于目标状态正确。
适用边界
- 部分操作只能用 command,难以完全幂等。
- 不覆盖密钥管理。