介绍
yum模块是CentOS7/RHEL7系专用包管理模块,具备幂等性(重复执行不会报错,已安装就不重复安装),底层封装yum,优于直接用shell/command模块执行安装软件。
CentOS8+
推荐 dnf 模块,用法几乎和 yum 一致。
基础语法
ansible 主机组/主机 -m yum -a "参数"
解释:
-m yum:指定使用 yum 模块-a "xxx":模块参数
常用参数
| 参数 | 说明 |
|---|---|
name |
软件包名称,可以带版本,多个包用逗号分隔 |
state |
状态:present(安装,默认) / latest(更新到最新) / absent(卸载) |
update_cache |
yes/no,安装前执行 yum clean all && yum makecache,刷新yum源缓存 |
disable_gpg_check |
yes/no,是否关闭GPG校验,内网源常用 |
enablerepo |
指定启用哪个repo安装包 |
disablerepo |
安装时临时禁用某个repo |
list |
可选:installed/updates/available,列出包信息,不能和name一起用 |
注意: yum模块不是直接调用shell的yum命令,是ansible内置模块,幂等性(多次执行不会重复安装)。
安装例子
1. 安装软件包(present,存在即可,不升级)
ansible web -m yum -a "name=httpd state=present"
多个包一起安装:
ansible web -m yum -a "name=httpd,php state=present"
2. 安装指定版本
ansible web -m yum -a "name=httpd-2.4.6 state=present"
3. 升级到最新版本 latest
ansible web -m yum -a "name=httpd state=latest"
4. 安装前刷新yum缓存
ansible web -m yum -a "name=nginx state=present update_cache=yes"
5. 临时启用指定repo安装
ansible web -m yum -a "name=nginx state=present enablerepo=epel"
6. 关闭GPG校验(内网源场景)
ansible web -m yum -a "name=xxx state=present disable_gpg_check=yes"
7. 查询已安装包(list参数)
# 查询所有已安装
ansible web -m yum -a "list=installed"
# 查询可更新包
ansible web -m yum -a "list=updates"
卸载例子
ansible web -m yum -a "name=httpd state=absent"
返回结果字段说明
执行后常见返回信息:
changed: true:包发生变更(安装/卸载/升级)changed: false:包状态已经符合预期,无操作(幂等特性)rc:返回码,0=成功;非0=失败results:yum操作详细输出
常见坑
- CentOS8 不要再用yum模块,改用 dnf
ansible web -m dnf -a "name=nginx state=present" - name写版本时,包名和版本不能有空格
✅name=httpd-2.4.6
❌name=httpd - 2.4.6 - update_cache=yes 只是刷新缓存,不会自动升级系统包
- yum模块不能直接执行
yum groupinstall安装软件组,软件组要用name="@Development Tools"ansible web -m yum -a 'name="@Development Tools" state=present'
对比 shell 方式
# shell方式:没有幂等性,每次都会执行yum install
ansible web -m shell -a "yum install -y nginx"
推荐yum模块:幂等、输出结构化、ansible会自动判断是否已安装。