Ansible批量卸载软件需按系统自动适配模块:Debian系用apt state=absent(默认清理配置),RHEL系用yum/dnf state=absent(需autoremove或shell配合彻底清理),并结合file、service、user等模块删除残留配置、服务及用户,辅以check_mode验证和serial限流保障安全。

用 Ansible 批量卸载软件,核心是选对模块、适配系统类型、兼顾清理完整性。不是简单删包就完事,还要处理残留配置、服务、目录等,否则容易留下隐患。
按系统自动适配卸载模块
不同发行版用不同包管理器,硬写命令易出错。Ansible 提供了 os_family 判断能力,可让同一份任务在 Debian/Ubuntu 和 RHEL/CentOS 上自动走对应逻辑:
- Debian 系使用 apt 模块,
state: absent卸载包并自动清除依赖和配置(除非加purge: no) - RHEL 系使用 yum 或新版的 dnf 模块,
state: absent仅卸载软件,不删配置文件;如需彻底清理,得额外加autoremove: yes或配合 shell 执行rpm -e --nodeps - 避免混用模块:不要在 CentOS 上调 apt,也不要在 Ubuntu 上调 yum,否则任务直接失败
一次卸载多个软件包
单个包写一条 task 效率低,批量操作应合并处理:
- 用列表传参:
name: ["nginx", "httpd", "redis"],模块会逐个处理,失败时默认中断;加ignore_errors: yes可跳过个别失败项 - 若需确保顺序或依赖关系(如先停服务再卸载),拆成多个 task,用
service模块提前 stop + disable,再执行卸载 - 注意包名大小写和拼写:Ubuntu 中是
vim,CentOS 中可能是vim-enhanced,建议先在目标机上apt list --installed | grep vim或rpm -qa | grep vim确认实际名称
连带清理残留文件与服务
卸载软件包本身不等于环境归零。常见残留包括:
-
配置目录:如
/etc/nginx/、/var/lib/mysql/,用 file 模块设state: absent删除整个路径 -
数据目录:如日志、缓存、上传文件,建议先
backup: yes备份再删,防止误操作 -
系统服务:即使包已卸,
systemctl list-unit-files | grep enabled可能仍有残留 unit 文件,用file模块删/usr/lib/systemd/system/*.service或/etc/systemd/system/*.service -
用户与组:某些软件创建专用用户(如
mysql、postgres),可用 user 模块设state: absent remove: yes彻底清理
安全执行与验证机制
批量操作风险高,必须有兜底措施:
- 加
check_mode: yes先试运行,查看哪些主机将变更、是否满足条件,不真正执行 - 用
register捕获卸载结果,结合failed_when或assert模块做断言校验,比如确认nginx包已不存在:shell: dpkg -l nginx | grep "^ii" || rpm -q nginx - 敏感操作前加
vars_prompt交互确认,例如:- name: Confirm uninstall prompt: "Really uninstall {{ packages }}? (y/n)" private: no - 生产环境建议限制并发数:
serial: 3,避免同时在几十台机器上卸载关键组件导致雪崩

















