简介
在本实验中,你将学习如何在 Red Hat Enterprise Linux(RHEL)系统上安装 Ansible Core。Ansible 是一款广泛应用于 IT 自动化的强大工具,可帮助你高效完成系统管理与配置、应用部署,以及复杂运维流程的自动化编排。
你将使用具备 sudo 权限的 dnf 软件包管理器安装 ansible-core 软件包。该软件包提供 Ansible 的核心引擎与常用命令行工具。安装完成后,你还将通过检查版本信息和执行基础命令来验证 Ansible 是否已正确安装并能够正常运行。
对于使用 Red Hat Enterprise Linux 的系统管理员、运维工程师以及 DevOps 工程师来说,掌握这项技能是进行 Linux 自动化运维的重要基础。
使用 dnf 安装 Ansible Core
在这一步中,你将通过 dnf 软件包管理器安装 ansible-core 软件包。Ansible Core 提供运行自动化任务所必需的核心组件,包括 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 Collection(模块和插件集合)的目录
- executable location: ansible 可执行文件的实际位置
- python version: 当前 Ansible 使用的 Python 解释器版本
- jinja version: Ansible 用于动态内容渲染的模板引擎版本
- libyaml = True: 表示已启用更高性能的 YAML 解析支持
这些信息表明 Ansible 已成功安装,并且环境配置正常。接下来,再检查 ansible-playbook 命令是否可以使用:
ansible-playbook --version
你应该会看到与 ansible 类似的版本输出。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 自动化运维。
要查看可用模块列表,请运行以下命令,并将前几行结果保存到文件中:
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: 在目标系统上执行命令
- 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 模块收集系统 facts 信息
- 探索可用模块:你学习了如何使用 ansible-doc 命令发现并阅读丰富的 Ansible 模块文档。
现在,你的 RHEL 系统已经具备一个可用且完整的 Ansible 环境,你也掌握了开始进行 Linux 自动化与基础设施自动化所需的核心命令。这为后续学习更高级的 Ansible 主题打下了良好基础,例如编写 Playbook、管理清单文件,以及构建更复杂的自动化工作流。
