Ansible 通过调用目标主机原生包管理器(如 apt、dnf、yum)安装依赖库,而非自身自动化安装;需按系统族选用对应模块、用 state 控制状态、配合 when 条件判断实现跨平台幂等安装。

Ansible 本身不“自动化安装依赖库”,而是通过调用目标主机上的原生包管理器(如 apt、dnf、yum)来安装软件包——这些软件包就是运行应用或服务所需的依赖库。关键不是 Ansible 自己装依赖,而是你用它精准、幂等地触发目标机执行安装动作。
明确依赖来源:按系统族选对模块
不同 Linux 发行版用不同包管理器,Ansible 提供对应模块屏蔽差异:
-
Debian/Ubuntu:用
ansible.builtin.apt,支持 deb 包、PPA 源、缓存更新 -
RHEL/CentOS 7 及更早:用
ansible.builtin.yum -
RHEL/CentOS 8+、Rocky/AlmaLinux/Fedora:用
ansible.builtin.dnf -
openSUSE/SLES:用
ansible.builtin.zypper -
Arch Linux:用
ansible.builtin.pacman
写法要稳:状态控制 + 条件判断
避免硬编码适配,靠变量和条件自动匹配目标环境:
- 用
state: present确保依赖已安装(不升级);state: latest强制升级到最新版 - 指定多个包:
name: ["python3-pip", "libffi-dev", "openssl-devel"] - 限定系统族执行:
when: ansible_os_family == 'RedHat'或when: ansible_distribution == 'Ubuntu' - 指定版本(需仓库支持):
name: nginx version: "1.24.0"
执行前必须确认的三件事
否则命令会卡住或报错,不是 Ansible 问题,而是环境没准备好:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 被控机已安装 Python(通常 3.6+),且
python3在 PATH 中(Ansible 模块靠它运行) - 包管理器命令可直接调用(如
/usr/bin/dnf),否则需显式设pkg_mgr: dnf - 非 root 用户执行时,加
become: yes并确保 sudo 权限;root 执行则无需提权
示例:统一安装开发依赖
下面这段 playbook 能在 Ubuntu 和 RHEL 系统上分别装好编译 Python 扩展所需的头文件和工具:
- name: install build dependencies
hosts: all
become: yes
tasks:
- name: install on Debian/Ubuntu
ansible.builtin.apt:
name: ["build-essential", "python3-dev", "libffi-dev", "libssl-dev"]
state: present
when: ansible_os_family == 'Debian'
<pre class="brush:php;toolbar:false;">- name: install on RHEL/CentOS/Rocky
ansible.builtin.dnf:
name: ["gcc", "python3-devel", "openssl-devel", "libffi-devel"]
state: present
when: ansible_os_family == 'RedHat'
不复杂但容易忽略










