ansible通过调用原生包管理器模块实现软件部署,不依赖代理,核心模块包括apt(debian/ubuntu)、yum(rhel/centos 7及更早)、dnf(rhel/centos 8+)、zypper(opensuse/sles)和pacman(arch linux),支持state控制安装状态、when判断系统族、批量安装及版本指定,并依赖python环境、path配置、sudo权限和网络连通性,具备默认幂等性。

Ansible本身不直接“部署软件包”,而是通过模块调用目标主机上的原生包管理器(如apt、yum、dnf、zypper等)完成安装。整个流程由控制节点下发指令,被控节点本地执行,无需额外代理。
核心安装模块与对应系统
Ansible提供标准化模块屏蔽底层差异,关键模块如下:
- ansible.builtin.apt:专用于Debian/Ubuntu系,支持deb包、PPA源、缓存更新等
- ansible.builtin.yum:适用于RHEL/CentOS 7及更早版本
- ansible.builtin.dnf:RHEL/CentOS 8+、Fedora默认包管理器模块
- ansible.builtin.zypper:openSUSE/SLES专用
- ansible.builtin.pacman:Arch Linux系列
典型安装任务写法
Playbook中定义安装逻辑时,需明确目标、状态和条件,避免硬编码适配问题:
- 使用
state: present确保软件包已安装(不升级) - 用
state: latest强制升级到最新可用版本 - 结合
when判断操作系统族:when: ansible_os_family == 'Debian' - 可指定版本号:
name: nginx version=1.24.0(需仓库支持) - 批量安装多个包:
name: ["git", "curl", "vim"]
依赖与环境准备要点
Ansible执行包安装前,依赖项必须就绪:
- 被控主机需预装Python(通常2.7或3.6+),Ansible通过Python解释器调用模块
- 确保包管理器命令在PATH中(如
/usr/bin/apt),否则需显式指定pkg_mgr参数 - 若使用非root用户执行,需配置
become: yes并确保sudo权限(尤其涉及系统级安装) - 网络连通性要保障——能访问软件源(如http://archive.ubuntu.com或https://mirrors.aliyun.com)
验证与幂等性保障
Ansible的安装操作默认具备幂等性:重复运行同一Playbook,仅当状态不一致时才触发变更:
- 模块返回
changed: false表示目标已满足,无需动作 - 可通过
register捕获结果,后续任务用when: result.changed做条件分支 - 安装后建议加校验任务,例如
command: which nginx或service: name=nginx state=started











