Ansible怎么使用yum和apt模块批量跨节点更新底层依赖

轻晨君_4832

轻晨君_4832

2026-10-08

259人浏览

原创

ansible需根据ansible_facts.pkg_mgr动态选择yum或apt模块:pkg_mgr为yum/dnf时用yum模块并设update_cache: yes和state: latest,为apt时用apt模块配update_cache: yes与upgrade: dist,避免硬编码导致模块未找到或更新失效。

ansible怎么使用yum和apt模块批量跨节点更新底层依赖

用 yum 和 apt 模块更新依赖前,先确认目标节点包管理器类型

Ansible 不会自动判断远程主机该走 yum 还是 apt —— 它只按任务里写的模块执行。混用或硬编码会导致部分节点报错 "module not found" 或 "No module named 'apt'"(尤其在 CentOS/AlmaLinux 用 apt 时)。真实场景中,常见做法是用 ansible_facts.pkg_mgr 动态选择模块:

  • pkg_mgr == "yum" → 用 yum 模块(RHEL/CentOS/Alma/Rocky 8+ 默认)
  • pkg_mgr == "dnf" → 也走 yum 模块(Ansible 2.10+ 已统一支持 dnf 作为 yum 模块后端)
  • pkg_mgr == "apt" → 用 apt 模块(Debian/Ubuntu)

别依赖 os_family 判断,有些定制镜像会改 /etc/os-release 却没换包管理器。

yum 模块更新系统依赖要加 state: latest 和 update_cache: yes

很多人写 yum: name=openssl state=latest 却发现没更新到最新版,原因是本地元数据过期。RHEL 系列默认不自动刷新缓存,必须显式声明:

Photo Booth by Magic Studio
Photo Booth by Magic Studio

Photo Booth by Magic Studio是一款AI图像与设计工具,AI创建个人资料图片。

下载
  • update_cache: yes 相当于运行 yum makecache,建议始终开启
  • state: latest 才会升级(present 只装不升)
  • 批量更新所有依赖?用 name: "*" state: latest,但生产环境慎用 —— 可能触发内核、glibc 等关键包升级,需重启或导致服务中断
  • 想跳过某些包?用 exclude: kernel*,python3*(注意 shell glob 语法,不是正则)

apt 模块更新必须先 update_cache: yes,且默认不升级已安装包

apt 模块行为和 yum 不同:即使设了 state: latest,若不先刷新缓存,它只会检查已安装版本是否匹配缓存里的“当前最新”,而缓存可能几周没更新。典型错误现象是执行后返回 "changed: false",实际却没升。

  • 必须配对使用:update_cache: yes + cache_valid_time: 3600(避免每轮都重刷)
  • upgrade: dist 才等价于 apt-get dist-upgrade(处理依赖变更),upgrade: yes 仅对应 apt-get upgrade(跳过需删除/重装的包)
  • 更新单个包如 libssl1.1,直接写 name: libssl1.1 state: latest 即可;不用像 yum 那样担心 epoch 冲突 —— apt 自动选最高版本

跨节点批量更新要防止单点失败中断整个 play

默认 Ansible 遇到一个节点失败就停,但系统更新常有临时性失败(如网络抖动、锁文件冲突)。用以下组合降低风险:

  • ignore_errors: yes 仅适用于非关键节点,不能掩盖真实问题
  • 更稳妥的是 any_errors_fatal: no(作用于 play 级)+ max_fail_percentage: 20(允许最多 20% 节点失败)
  • 加 become: yes 和 become_method: sudo,确保有 root 权限;某些 Ubuntu 节点默认禁用 root ssh,必须走 sudo
  • 更新前建议加 command: apt-mark showhold 或 shell: rpm -q --qf '%{NAME} %{EPOCH}:%{VERSION}-%{RELEASE}\n' $(rpm -q --qf '%{NAME}\n' | grep -E '^(kernel|glibc)$') 做快检,避开被 hold 的包

真正麻烦的不是命令怎么写,而是更新后是否要 reboot、systemd 服务是否 reload、以及旧动态库是否被新进程继续引用 —— 这些得靠后续 task 或外部监控补位,Ansible 本身不处理运行时状态迁移。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux配置 linux shell

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

2026.10.08

0

20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

80

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

100

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

300

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

180

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

140

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.9万人学习