在 Red Hat Enterprise Linux 上安装 Ansible

AnsibleBeginner
立即练习

简介

在本实验中,你将学习如何在 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 引擎,包括自动化任务所需的 ansibleansible-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。你完成了以下任务:

  1. 安装 Ansible Core:你使用了 sudo dnf install ansible-core -y 命令从官方 Red Hat 仓库安装了核心 Ansible 软件包及其依赖项。

  2. 验证安装:你通过检查 ansibleansible-playbook 命令的版本,确认了 Ansible 已正确安装。

  3. 测试基本功能:你运行了简单的 Ansible 命令来验证安装是否正常工作,包括:

    • 使用 ping 模块测试连接性
    • 使用 setup 模块收集系统事实
  4. 探索可用模块:你学习了如何使用 ansible-doc 发现并阅读庞大的 Ansible 模块库文档。

现在,你的 RHEL 系统上已经拥有了一个功能完备的 Ansible 环境,并掌握了开始自动化基础设施所需的基本命令。这一基础为你学习更高级的 Ansible 主题(如编写 Playbook、管理清单以及实现复杂的自动化工作流)做好了准备。