拿 shell 直跑命令最危险,第二次执行还会再改一遍。
优先换成内置模块,像 file、copy、service 会先比对状态。
非要用命令就加 creates 或 changed_when 条件,让它知道自己做没做。
执行前跑 check 模式看变更清单,重复跑一遍应为零变更才算合格。
# 反例:每次跑都会 report changed
- shell: mkdir -p /data/app
# 幂等写法:有则跳过
- file: { path: /data/app, state: directory }
# 命令类任务加条件
- command: /usr/local/bin/init-db
args: { creates: /var/lib/app/db.initialized }
# 验证:重复执行应为 0 changed
ansible-playbook site.yml --check --diff
THE END






暂无评论内容