介绍
apt模块是Ubuntu/Debian系专用包管理模块,具备幂等性(重复执行不会报错,已安装就不重复安装),底层封装apt,优于直接用shell/command模块执行apt install。
语法
被管理Ubuntu节点前置依赖:python3-apt,apt模块依赖此包,没有会报错
ansible all -m apt -a "name=python3-apt state=present" -b
参数
| 参数 | 说明 |
|---|---|
name |
包名;多个包逗号分隔;指定版本 name=nginx=1.24.0-1ubuntu1 |
state |
present:安装(存在就不操作);latest:安装并升级到最新;absent:卸载 |
update_cache |
yes/no,执行前执行apt update刷新源缓存,等价apt update |
cache_valid_time |
缓存有效期(秒),例如3600,1小时内不再重复update,减少耗时 |
purge |
yes/no,卸载时彻底删除配置文件(state=absent时生效) |
autoremove |
yes/no,操作后自动清理无用依赖包 |
install_recommends |
yes/no,是否安装推荐依赖,no等价--no-install-recommends |
upgrade |
dist:dist-upgrade;safe:安全升级;full:完整升级;no默认不升级 |
安装例子
1. 安装单个软件(幂等,推荐)
安装nginx,不更新源缓存
ansible all -m apt -a "name=nginx state=present" -b -i ansible_client.ini
安装前先apt update
ansible all -m apt -a "name=nginx state=present update_cache=yes" -b -i ansible_client.ini
2. 一次性安装多个包
ansible all -m apt -a "name=vim,curl,htop,git state=present update_cache=yes" -b -i ansible_client.ini
3. 安装指定版本软件
ansible all -m apt -a "name=nginx=1.24.0-1ubuntu1 state=present" -b -i ansible_client.ini
4. 保持软件为最新版本
ansible all -m apt -a "name=nginx state=latest update_cache=yes" -b -i ansible_client.ini
5. 安装不附带推荐依赖(精简安装)
ansible all -m apt -a "name=nginx state=present install_recommends=no" -b -i ansible_client.ini
6. 缓存有效期控制
高频批量场景,减少apt update
# 缓存1小时内有效,1小时内多次执行不会重复apt update
ansible all -m apt -a "name=nginx state=present update_cache=yes cache_valid_time=3600" -b -i ansible_client.ini
返回结果说明
执行后返回JSON:
changed: true:本次执行做了变更(新安装/升级)changed: false:目标状态已满足,无修改(幂等生效)cache_updated:是否执行了apt update
卸载例子
仅删除包,保留配置
ansible all -m apt -a "name=nginx state=absent" -b -i ansible_client.ini
彻底删除包+配置文件
ansible all -m apt -a "name=nginx state=absent purge=yes" -b -i ansible_client.ini
卸载并自动清理无用依赖
ansible all -m apt -a "name=nginx state=absent purge=yes autoremove=yes" -b -i ansible_client.ini
全系统批量升级
ansible all -m apt -a "update_cache=yes upgrade=dist" -b
apt模块 vs shell/command模块
- apt模块(推荐):幂等、自动检测包状态、返回结构化json结果、不会重复安装;
- command/shell模块(不推荐用于包管理):
缺点: 不幂等,多次执行会重复执行apt命令;输出是原始文本,无法识别包状态。ansible all -a "apt install -y nginx" -b
常见坑
- 忘记加
-b:apt安装需要root权限,不加直接报错; - 缺少python3-apt:Ubuntu最小化系统默认不带,apt模块执行失败;
- update_cache=yes频繁执行:大批量服务器循环执行时,用
cache_valid_time减少源刷新; - 版本号写法:
name=pkg=version,不是name=pkg-version; - 跨系统:apt模块只能Ubuntu/Debian,CentOS/RHEL要用yum模块,通用跨平台模块
-m package。
