Ansible模块——设置软件仓库和安装软件包
设置软件仓库
ansible.builtin.rpm_key
ansible.builtin.rpm_key
用于在 Fedora/RHEL 上导入或移除 GPG 公钥。
参数名 | 类型 | 默认值 | 说明 |
fingerprint | str | null | 指定公钥的完整指纹(long-form)。在导入前会比对公钥是否匹配此指纹,增强安全性。建议用于确保下载的 key 没有被篡改。例: |
key | str | null | 公钥路径或 URL,或已存在的 key ID。可用来导入(本地或远程)或删除(用 keyid)。 |
state | str | present | 指定状态: |
validate_certs | bool | true | 下载远程 key 时,是否验证 HTTPS 证书。 设为 |
- name: Import a key from a url
ansible.builtin.rpm_key:
state: present
key: http://apt.sw.be/RPM-GPG-KEY.dag.txt
- name: Import a key from a file
ansible.builtin.rpm_key:
state: present
key: /path/to/key.gpg
- name: Ensure a key is not present in the db
ansible.builtin.rpm_key:
state: absent
key: DEADB33F
- name: Verify the key, using a fingerprint, before import
ansible.builtin.rpm_key:
key: /path/to/RPM-GPG-KEY.dag.txt
fingerprint: EBC6 E12C 62B1 C734 026B 2122 A20E 5214 6B8D 79E6
ansible.builtin.yum_repository
ansible.builtin.yum_repository
用于设置软件仓库:
选项 | 类型 | 默认值 | 说明 |
name | str | null | 仓库 ID,唯一标识该仓库(即 |
description | str | null | 仓库描述,主要是为了可读性,在 |
baseurl | str | null | 仓库的主地址,用于直接访问软件包。URL 中的 |
file | str | 和 | 指定生成的 |
mirrorlist | str | null | 镜像列表地址,用于从多个镜像中自动选择一个。与 |
enabled | bool | true | 是否启用该仓库。 |
gpgcheck | bool | false | 是否启用 GPG 签名校验。 |
state | str | present | 可选值有 |
exclude | str/list | null | 排除的包名,支持通配符,如 |
priority | int | null | 仓库优先级(启用 |
- name: Add repository
ansible.builtin.yum_repository:
name: epel1
description: EPEL YUM repo
baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
file: external_repos
mirrorlist: http://mirrorlist.repoforge.org/el7/mirrors-rpmforge
enabled: no
gpgcheck: no
state: absent
ansible.builtin.apt_key
ansible.builtin.apt_key
用于在 Debian/Ubuntu 系统上添加或移除 APT GPG 公钥。
参数名 | 类型 | 默认值 | 说明 |
id | str | null | 要添加或删除的 key ID(短 ID 或完整指纹均可)。 删除 key 时推荐使用。 |
url | str | null | GPG 公钥的 URL,支持 HTTPS。会自动下载并添加。 |
file | str | null | 公钥文件的本地路径,适用于已预先下载到目标机的公钥。 |
keyring | str | null | 指定要写入的 keyring 文件路径(通常用于 |
state | str | present | present 表示添加 key, |
validate_certs | bool | yes | 使用 |
keyserver | str | null | 指定公钥服务器,如 |
data | str | null | 直接传入 GPG 公钥内容(字符串形式)。 |
- name: One way to avoid apt_key once it is removed from your distro, armored keys should use .asc extension, binary should use .gpg
block:
- name: somerepo | no apt key
ansible.builtin.get_url:
url: https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x36a1d7869245c8950f966e92d8576a8ba88d21e9
dest: /etc/apt/keyrings/myrepo.asc
checksum: sha256:bb42f0db45d46bab5f9ec619e1a47360b94c27142e57aa71f7050d08672309e0
- name: somerepo | apt source
ansible.builtin.apt_repository:
repo: "deb [arch=amd64 signed-by=/etc/apt/keyrings/myrepo.asc] https://download.example.com/linux/ubuntu {{ ansible_distribution_release }} stable"
state: present
- name: Add an apt key by id from a keyserver
ansible.builtin.apt_key:
keyserver: keyserver.ubuntu.com
id: 36A1D7869245C8950F966E92D8576A8BA88D21E9
- name: Add an Apt signing key, uses whichever key is at the URL
ansible.builtin.apt_key:
url: https://ftp-master.debian.org/keys/archive-key-6.0.asc
state: present
- name: Add an Apt signing key, will not download if present
ansible.builtin.apt_key:
id: 9FED2BCBDCD29CDF762678CBAED4B06F473041FA
url: https://ftp-master.debian.org/keys/archive-key-6.0.asc
state: present
- name: Remove a Apt specific signing key, leading 0x is valid
ansible.builtin.apt_key:
id: 0x9FED2BCBDCD29CDF762678CBAED4B06F473041FA
state: absent
ansible.builtin.apt_repository
选项 | 类型 | 默认值 | 说明 |
repo | str | null | 要添加的源定义,格式类似于 |
state | str | present | 设置为 |
filename | str | null | 保存源信息的文件名(位于 |
update_cache | bool | false | 添加源后是否运行 |
validate_certs | bool | true | 连接 HTTPS 源时是否验证 SSL 证书 |
codename | str | null | 指定发行版代号(如 |
mode | str | 0644 | 保存源文件时的权限 |
state | str | present | 是否添加或删除源(可为 |
- name: 添加 MongoDB 源
ansible.builtin.apt_repository:
repo: "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse"
state: present
filename: "mongodb"
update_cache: yes
- name: 添加 PPA 源
ansible.builtin.apt_repository:
repo: ppa:deadsnakes/ppa
state: present
update_cache: yes
- name: 删除 mongodb 源
ansible.builtin.apt_repository:
filename: mongodb
state: absent
软件包安装
ansible.builtin.yum
ansible.builtin.yum
模块兼容旧版本系统(RHEL6/7)
所有选项:
选项 | 类型 | 默认值 | 说明 |
allow_downgrade | bool | false | 允许安装较旧版本的软件包。 |
autoremove | bool | false | 删除软件包时自动移除其依赖。 |
bugfix | bool | false | 仅应用 bugfix 类型更新(需启用插件)。 |
conf_file | str | /etc/yum.conf | 指定 YUM 配置文件路径。 |
disable_gpg_check | bool | false | 禁用 GPG 签名验证。 |
disable_plugin | str/list | null | 禁用指定插件(如 fastestmirror)。 |
enable_plugin | str/list | null | 启用指定的插件,多个插件可以通过列表形式启用。 |
disablerepo | str/list | null | 禁用特定仓库。 |
download_only | bool | false | 仅下载,不安装。 |
download_dir | str | null | 下载 |
enablerepo | str/list | null | 启用特定仓库。 |
exclude | str/list | null | 排除匹配的包名,支持通配符。 |
install_weak_deps | bool | true | 是否安装弱依赖(推荐包)。 |
installroot | str | / | 更改安装根路径,常用于 chroot。 |
list | str | null | 显示匹配的软件包列表,例如 |
lock_timeout | int | 30 | 等待 YUM 锁释放的时间(秒)。 |
name | str/list | null | 包名,支持单个或多个,也支持 |
security | bool | false | 仅应用安全更新(需启用插件)。 |
skip_broken | bool | false | 忽略依赖问题并跳过损坏包。 |
state | str | present | 包的期望状态: |
update_cache | bool | false | 先更新 YUM 缓存(等同 |
update_only | bool | false | 仅允许更新已安装的软件包,不做新安装。 |
validate_certs | bool | true | 是否校验 HTTPS 仓库 SSL 证书。 |
install_repoquery | bool | true | 自动安装 |
disable_excludes | str | null | 忽略某些配置中的 |
cacheonly | bool | false | 只使用本地缓存的包,避免从网络下载。 |
releasever | str | 当前系统版本号 | 强制使用指定版本的仓库,适用于不同版本的操作系统。 |
sslverify | bool | true | 控制是否验证 SSL 证书,适用于不需要验证证书的仓库。 |
use_backend | str | null | 强制使用指定的包管理后端工具,通常是 |
常用选项:
选项名 | 说明 | 示例 |
name | 软件包名称,可以是单个包或列表,也支持通配符(软件包组需要在前边加 | nginx 或 |
state | 包的期望状态,如 | state: present |
enablerepo | 启用指定的 YUM 仓库进行安装 | enablerepo: epel |
disablerepo | 禁用指定仓库 | disablerepo: base |
update_cache | 更新缓存( | update_cache: true |
disable_gpg_check | 禁用 GPG 签名检查 | disable_gpg_check: true |
exclude | 排除匹配的包名,支持通配符。 | kernel* |
download_only | 只下载不安装(适合离线环境) | download_only: true |
download_dir | 下载 | download_dir: /tmp/ |
- name: Install the latest version of Apache
ansible.builtin.yum:
name: httpd
state: latest
- name: Install Apache >= 2.4
ansible.builtin.yum:
name: httpd>=2.4
state: present
- name: Install a list of packages (suitable replacement for 2.11 loop deprecation warning)
ansible.builtin.yum:
name:
- nginx
- postgresql
- postgresql-server
state: present
- name: Remove the Apache package
ansible.builtin.yum:
name: httpd
state: absent
- name: Upgrade all packages, excluding kernel & foo related packages
ansible.builtin.yum:
name: '*'
state: latest
exclude: kernel*,foo*
- name: Install the nginx rpm from a remote repo
ansible.builtin.yum:
name: http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
state: present
- name: Install nginx rpm from a local file
ansible.builtin.yum:
name: /usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm
state: present
- name: Install the 'Development tools' package group
ansible.builtin.yum:
name: "@Development tools"
state: present
- name: Install package with multiple repos enabled
ansible.builtin.yum:
name: sos
enablerepo: "epel,ol7_latest"
- name: Download the nginx package but do not install it
ansible.builtin.yum:
name:
- nginx
state: latest
download_only: true
download_dir: /tmp/
- name: Update cache
ansible.builtin.yum:
update_cache: true
ansible.builtin.dnf
ansible.builtin.dnf
模块更适合新版本系统(RHEL 8 以后)
大部分选项和 ansible.builtin.yum
相同,比 yum
多了两个选项:
选项 | 作用 | 默认值 | 示例 |
allowerasing | 允许删除冲突包以解决依赖关系 | no | allowerasing: yes |
nobest | 不强制安装最新版本,而是选择合适版本 | no | nobest: yes |
使用方法和 ansible.builtin.yum
相同,模块名改成 ansible.builtin.dnf
就行。
ansible.builtin.dnf5
这个还在开发中,相比于 ansible.builtin.dnf
,少了 use_backend
选项。
ansible.builtin.apt
参数 | 类型 | 默认值 | 说明 |
name | str / | null | 要安装、删除或管理的软件包名称或列表 |
state | str | present | 包的状态: |
update_cache | bool | false | 是否在安装前执行 |
upgrade | str | false | 升级策略: |
autoremove | bool | false | 是否自动删除不再需要的依赖包 |
purge | bool | false | 删除时是否同时清理配置文件( |
force | bool | false | 强制操作(谨慎使用) |
only_upgrade | bool | false | 仅升级已安装的软件包 |
default_release | str | null | 指定默认的 apt 发布版本 |
dpkg_options | list | null | 传递给 |
deb | str | null | 安装本地 |
- name: Installation of common tools
ansible.builtin.apt:
name:
- vim
- git
- curl
state: present
- name: Update cache and install
ansible.builtin.apt:
name: htop
state: present
update_cache: yes
- name: Upgrade system
ansible.builtin.apt:
upgrade: dist
- name: Uninstall nginx
ansible.builtin.apt:
name: nginx
state: absent
purge: yes
- name: Install local deb package
ansible.builtin.apt:
deb: /tmp/custom-package.deb