简介
在本实验中,你将学习如何在 Red Hat Enterprise Linux (RHEL) 系统上安装 Ansible Core。Ansible 是一款功能强大的自动化工具,能够帮助你管理和配置系统、部署应用程序以及编排复杂的 IT 工作流。
你将使用带有 sudo 权限的 dnf 软件包管理器来安装 ansible-core 软件包,该软件包提供了 Ansible 的核心引擎和命令行工具。安装完成后,你将通过检查版本和运行基本命令来验证 Ansible 是否正常工作。
对于使用 Red Hat Enterprise Linux 系统的系统管理员和 DevOps 工程师来说,这是一项基础技能。
使用 dnf 安装 Ansible Core
在此步骤中,你将使用 dnf 软件包管理器安装 ansible-core 软件包。Ansible Core 提供了必要的 Ansible 引擎,包括自动化任务所需的 ansible、ansible-playbook 以及其他核心命令行工具。
dnf (Dandified YUM) 软件包管理器是 Red Hat Enterprise Linux 上管理软件包的标准工具。由于安装软件需要管理员权限,因此必须使用 sudo 命令。
运行以下命令以自动确认安装 Ansible Core:
sudo dnf install ansible-core -y
-y 参数会自动对所有提示回答“yes”,从而实现非交互式安装。系统将下载并安装 ansible-core 及其 Python 依赖项,包括用于模板处理的 Jinja2 和用于 YAML 处理的 PyYAML。
你应该会看到类似以下的输出,显示软件包的解析和安装进度:
Updating Subscription Management repositories.
Last metadata expiration check: ...
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
ansible-core noarch 2.16.x-x.el9 rhel-9-appstream xx M
Installing dependencies:
python3-jinja2 noarch x.x.x-x.el9 rhel-9-appstream xxx k
python3-yaml x86_64 x.x.x-x.el9 rhel-9-appstream xxx k
...
Transaction Summary
================================================================================
Install XX Packages
Complete!
验证 Ansible 安装
现在你已经安装了 Ansible Core,让我们通过检查版本并确认必要的命令行工具是否可用,来验证安装是否成功。
首先,通过运行以下命令检查 Ansible 版本:
ansible --version
该命令会显示有关 Ansible 安装的详细信息,包括核心版本、Python 版本以及各组件的位置。你应该会看到类似以下的输出:
ansible [core 2.14.18]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.9/site-packages/ansible
ansible collection location = /home/labex/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.9.21 (main, Feb 10 2025, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-5)] (/usr/bin/python3)
jinja version = 3.1.2
libyaml = True
让我们了解每一行的含义:
- ansible [core 2.14.18]: 显示已安装的 Ansible Core 版本
- config file: 指向包含默认设置的 Ansible 主配置文件
- configured module search path: Ansible 查找自定义模块的目录
- ansible python module location: Ansible 核心 Python 代码的安装位置
- ansible collection location: 存储 Ansible 集合(打包的模块和插件)的目录
- executable location:
ansible命令二进制文件的实际位置 - python version: Ansible 使用的 Python 解释器版本
- jinja version: Ansible 用于动态内容的模板引擎版本
- libyaml = True: 确认已启用快速 YAML 解析器以获得更好的性能
这证实了 Ansible 已正确安装并可供使用。接下来,让我们检查 ansible-playbook 命令是否可用:
ansible-playbook --version
你应该会看到 ansible-playbook 工具的类似版本信息,它是运行 Ansible Playbook 的核心组件。
使用简单命令测试 Ansible
在此步骤中,你将通过在本地系统上运行一个简单命令来测试 Ansible 的安装情况。切换到项目目录,并使用预配置的清单文件运行一个 Ansible 即席(ad-hoc)命令。
导航到项目目录并测试基本的 ping 功能。将输出保存到文件中,以便你可以再次查看,并让步骤验证器可靠地确认结果:
cd /home/labex/project
ansible localhost -m ping | tee ping-output.txt
ping 模块实际上并不发送 ICMP 数据包;相反,它验证 Ansible 是否可以连接到目标并执行 Python 代码。成功的响应如下所示:
localhost | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
让我们解析一下输出:
- localhost | SUCCESS: 表明命令在 localhost 目标上执行成功
- ansible_facts: 包含执行期间发现的系统信息
- discovered_interpreter_python: Ansible 发现并将使用的 Python 解释器路径
- changed: false: 表示未对系统进行任何更改(ping 是只读操作)
- ping: "pong": 确认 Ansible 连接正常的经典响应
“pong”响应确认了 Ansible 工作正常,并且可以与目标系统通信。
接下来,让我们使用 setup 模块收集系统信息,并将该输出也保存下来:
ansible localhost -m setup -a "filter=ansible_distribution*" | tee setup-output.txt
该命令使用 setup 模块收集系统事实(facts),并专门过滤出发行版信息。你应该会看到包含有关 Red Hat Enterprise Linux 系统详细信息的输出:
localhost | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "RedHat",
"ansible_distribution_file_parsed": true,
"ansible_distribution_file_path": "/etc/redhat-release",
"ansible_distribution_file_search_string": "Red Hat",
"ansible_distribution_file_variety": "RedHat",
"ansible_distribution_major_version": "9",
"ansible_distribution_release": "Plow",
"ansible_distribution_version": "9.6",
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false
}
理解系统事实输出:
- ansible_distribution: Linux 发行版名称 (RedHat)
- ansible_distribution_file_parsed: Ansible 是否成功读取了发行版文件
- ansible_distribution_file_path: 包含发行版信息的文件
- ansible_distribution_file_search_string: 用于识别发行版的文本模式
- ansible_distribution_file_variety: 发行版系列 (RedHat 系列)
- ansible_distribution_major_version: 主版本号 (9)
- ansible_distribution_release: 发行版代号 (Plow)
- ansible_distribution_version: 完整版本号 (9.6)
- discovered_interpreter_python: Ansible 发现的 Python 解释器
这证实了 Ansible 可以成功从目标主机收集系统信息,这对于根据系统特征创建条件自动化至关重要。
探索可用的 Ansible 模块
Ansible 自带数百个用于各种自动化任务的内置模块。让我们探索一些可用模块,以了解安装后即可使用的功能。
要查看可用模块列表,请运行以下命令并将前几行保存到文件中:
ansible-doc -l | head -20 | tee module-list.txt
ansible-doc -l 命令列出所有可用模块,使用 head -20 可以查看前 20 个模块。这让你对 Ansible 提供的广泛自动化功能有所了解。你将看到类似以下的输出:
ansible.builtin.add_host Add a host (and alternatively a grou...
ansible.builtin.apt Manages apt-packages
ansible.builtin.apt_key Add or remove an apt key
ansible.builtin.apt_repository Add and remove APT repositories
ansible.builtin.assemble Assemble configuration files from fr...
ansible.builtin.assert Asserts given expressions are true
ansible.builtin.async_status Obtain status of asynchronous task
ansible.builtin.blockinfile Insert/update/remove a text block su...
ansible.builtin.command Execute commands on targets
ansible.builtin.copy Copy files to remote locations
ansible.builtin.cron Manage cron.d and crontab entries
ansible.builtin.debconf Configure a .deb package
ansible.builtin.debug Print statements during execution
ansible.builtin.dnf Manages packages with the `dnf' pack...
ansible.builtin.dpkg_selections Dpkg package selection selections
ansible.builtin.expect Executes a command and responds to p...
ansible.builtin.fail Fail with custom message
ansible.builtin.fetch Fetch files from remote nodes
ansible.builtin.file Manage files and file properties
ansible.builtin.find Return a list of files based on spec...
理解模块列表格式:
- ansible.builtin.: 表示这些是随 Ansible Core 一起提供的内置模块
- 模块名称: 在 Playbook 或即席命令中调用模块时使用的名称
- 描述: 对模块功能的简要说明
你经常会用到的一些重要模块:
- command: 在目标系统上执行 shell 命令
- copy: 将文件从控制机复制到远程主机
- dnf: 在 Red Hat 系统上安装、更新或删除软件包
- file: 创建目录、设置权限或管理文件属性
- debug: 在 Playbook 执行期间打印消息,用于故障排除
要获取特定模块的详细文档,可以使用带有模块名称的 ansible-doc 命令。将输出重定向到文件,以便命令保持非交互式,并方便以后查看。例如,要了解 copy 模块:
ansible-doc copy | tee copy-doc.txt
这将显示 copy 模块的完整文档,包括示例和参数说明,并将其副本保存到 copy-doc.txt 中。ansible-doc 命令为任何 Ansible 模块提供详细文档,使学习如何使用不同的自动化功能变得非常容易。
总结
在本实验中,你成功学习了如何在 Red Hat Enterprise Linux 系统上安装并验证 Ansible Core。你完成了以下任务:
安装 Ansible Core:你使用了
sudo dnf install ansible-core -y命令从官方 Red Hat 仓库安装了核心 Ansible 软件包及其依赖项。验证安装:你通过检查
ansible和ansible-playbook命令的版本,确认了 Ansible 已正确安装。测试基本功能:你运行了简单的 Ansible 命令来验证安装是否正常工作,包括:
- 使用
ping模块测试连接性 - 使用
setup模块收集系统事实
- 使用
探索可用模块:你学习了如何使用
ansible-doc发现并阅读庞大的 Ansible 模块库文档。
现在,你的 RHEL 系统上已经拥有了一个功能完备的 Ansible 环境,并掌握了开始自动化基础设施所需的基本命令。这一基础为你学习更高级的 Ansible 主题(如编写 Playbook、管理清单以及实现复杂的自动化工作流)做好了准备。


