如何将 Ansible 升级到最新版本

AnsibleBeginner
立即练习

介绍

Ansible 是一个强大的开源自动化工具,在 IT 行业中得到了广泛应用。随着 Ansible 的发展,保持你的安装是最新的版本,以便利用最新的特性和改进是非常重要的。本教程将指导你完成在 Ubuntu 上将 Ansible 升级到最新版本的过程,Ubuntu 是本实验环境使用的操作系统。

了解 Ansible 并检查你当前的版本

在升级 Ansible 之前,了解 Ansible 是什么以及检查你当前安装的版本是很有帮助的。

什么是 Ansible?

Ansible 是一个开源自动化平台,它简化了配置管理、应用程序部署和任务自动化。它使用 YAML 语法来创建 playbook,playbook 是描述系统所需状态的文档。

Ansible 的一些主要优点包括:

  • 无代理架构(Agentless architecture):无需在受管节点上安装代理
  • 简单语法:使用人类可读的 YAML 文件
  • 幂等执行(Idempotent execution):多次运行同一个 playbook 会产生相同的结果
  • 可扩展:支持自定义模块和插件

检查你当前的 Ansible 版本

让我们从检查 Ansible 是否已经安装开始,如果已安装,则检查你拥有的版本。打开一个终端并运行:

ansible --version

你应该看到类似这样的输出:

ansible [core 2.12.0]
  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/dist-packages/ansible
  ansible collection location = /home/labex/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]
  jinja version = 3.0.3
  libyaml = True

第一行显示你当前的 Ansible 版本。如果你没有看到这样的输出,则可能尚未安装 Ansible,这没关系,因为我们将在下一步中安装它。

了解 Ansible 版本控制

Ansible 遵循语义版本控制,包含三个数字:major.minor.patch

  • 主要版本(Major version):可能需要修改你的 playbook 的重大更改
  • 次要版本(Minor version):没有破坏性更改的新功能
  • 补丁版本(Patch version):错误修复和小的改进

现在我们已经了解了 Ansible 是什么,并检查了我们当前的版本,我们准备好在下一步中继续安装或升级 Ansible。

在 Ubuntu 上安装或升级 Ansible

在这一步中,我们将在 Ubuntu 22.04 系统上安装或升级 Ansible。我们将使用官方的 Ansible PPA(个人软件包档案库)来获取最新的稳定版本。

添加 Ansible PPA 存储库

首先,我们需要确保我们拥有添加 PPA 所需的依赖项:

sudo apt update
sudo apt install -y software-properties-common

此命令更新你的软件包索引并安装 software-properties-common 软件包,该软件包提供了 add-apt-repository 命令。

现在,让我们添加官方的 Ansible PPA 存储库:

sudo add-apt-repository --yes --update ppa:ansible/ansible

你将看到输出,显示存储库已添加到你的系统中。--yes 标志自动确认添加,而 --update 立即刷新软件包列表。

安装最新的 Ansible 版本

添加存储库后,我们现在可以安装最新版本的 Ansible:

sudo apt install -y ansible

-y 标志自动确认安装,无需提示确认。

此命令将安装 Ansible(如果它尚未安装),或将其升级到 PPA 中可用的最新版本。

验证安装或升级

安装完成后,让我们验证 Ansible 是否已正确安装并检查其版本:

ansible --version

输出应该显示 PPA 中可用的最新版本的 Ansible。如果你之前安装了旧版本,现在应该看到一个较新的版本号。

为了跟踪我们验证脚本的进度,让我们创建一个标记文件:

touch /tmp/ansible_version_checked
touch /tmp/ansible_installed

现在我们已经成功地在我们的 Ubuntu 系统上安装或升级了 Ansible。在下一步中,我们将探讨如何使用一些基本的 Ansible 命令来验证我们的安装是否正常工作。

使用简单的 Playbook 验证你的 Ansible 安装

现在 Ansible 已经安装好了,让我们通过创建和运行一个简单的 Ansible playbook 来确认它是否正常工作。Playbook 是 YAML 文件,用于描述你系统的所需状态以及 Ansible 应该执行以达到该状态的任务。

创建一个测试 Playbook

首先,让我们为我们的 Ansible 项目创建一个目录:

mkdir -p ~/project/ansible-test
cd ~/project/ansible-test

现在,让我们使用内置的代码编辑器创建一个简单的 playbook。在 WebIDE 中,单击左侧边栏中的“Explorer”图标,导航到我们刚刚创建的 ansible-test 目录,并创建一个名为 test-playbook.yml 的新文件。

将以下内容添加到此文件中:

---
- name: Test Ansible Installation
  hosts: localhost
  connection: local
  gather_facts: no

  tasks:
    - name: Print a message
      debug:
        msg: "Ansible is installed and working correctly!"

    - name: Get Ansible version
      command: ansible --version
      register: ansible_version_output

    - name: Display Ansible version
      debug:
        msg: "{{ ansible_version_output.stdout_lines[0] }}"

    - name: Create a test file
      file:
        path: /tmp/ansible-test-file.txt
        state: touch
        mode: "0644"

此 playbook 执行以下操作:

  1. 针对本地机器 (localhost)
  2. 打印成功消息
  3. 检索并显示 Ansible 版本
  4. /tmp/ansible-test-file.txt 处创建一个测试文件

运行 Playbook

现在让我们运行 playbook 来验证 Ansible 是否正常工作:

cd ~/project/ansible-test
ansible-playbook test-playbook.yml

你应该看到类似这样的输出:

PLAY [Test Ansible Installation] ***********************************************

TASK [Print a message] *********************************************************
ok: [localhost] => {
    "msg": "Ansible is installed and working correctly!"
}

TASK [Get Ansible version] *****************************************************
changed: [localhost]

TASK [Display Ansible version] *************************************************
ok: [localhost] => {
    "msg": "ansible [core 2.12.0]"
}

TASK [Create a test file] ******************************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

输出显示所有任务都已成功完成。changed=2 在总结中表明有两个任务对系统进行了更改(获取版本和创建文件)。

验证测试文件

让我们检查一下测试文件是否已创建:

ls -l /tmp/ansible-test-file.txt

你应该看到该文件及其指定的权限:

-rw-r--r-- 1 labex labex 0 Aug 30 12:34 /tmp/ansible-test-file.txt

让我们将此步骤标记为完成,以便我们的验证脚本:

touch /tmp/ansible_playbook_tested

恭喜你!你已经成功安装了最新版本的 Ansible,并通过运行一个简单的 playbook 验证了它是否正常工作。这确认了你的 Ansible 安装已完全运行并可以使用。

了解 Ansible 配置和模块

现在我们已经安装并运行了 Ansible,让我们来探索它的配置和模块的概念。

Ansible 配置

Ansible 使用配置文件来控制其行为。主配置文件是 ansible.cfg,它可以存在于多个位置。让我们检查默认的配置文件:

ls -la /etc/ansible/

你应该看到默认的 Ansible 目录结构:

total 20
drwxr-xr-x  2 root root 4096 Aug 30 12:00 .
drwxr-xr-x 85 root root 4096 Aug 30 12:00 ..
-rw-r--r--  1 root root 8669 Aug 30 12:00 ansible.cfg
-rw-r--r--  1 root root 1021 Aug 30 12:00 hosts

让我们看一下 hosts 文件,它是默认的 inventory 文件:

cat /etc/ansible/hosts

inventory 文件包含 Ansible 可以管理的 host 列表。默认情况下,它包含被注释掉的示例。

创建自定义配置

让我们在我们的项目目录中创建我们自己的 Ansible 配置文件。在 WebIDE 中,在 ~/project/ansible-test 目录中创建一个名为 ansible.cfg 的新文件,内容如下:

[defaults]
inventory = ./inventory
host_key_checking = False
stdout_callback = yaml

现在,让我们创建一个简单的 inventory 文件。在 WebIDE 中,在 ~/project/ansible-test 目录中创建一个名为 inventory 的新文件,内容如下:

[local]
localhost ansible_connection=local

探索 Ansible 模块

Ansible 模块是执行特定任务的可重用代码单元。让我们探索一些可用的模块:

ansible-doc -l | wc -l

此命令列出所有可用的模块并对其进行计数。你应该看到一个很大的数字,通常超过 1000 个模块。

让我们查看特定模块的文档,例如我们在 playbook 中使用的 file 模块:

ansible-doc file

你可以按 q 退出文档查看器。

创建更复杂的 Playbook

现在,让我们创建一个更高级的 playbook,它演示了更多 Ansible 模块。在 WebIDE 中,在 ~/project/ansible-test 目录中创建一个名为 modules-demo.yml 的新文件,内容如下:

---
- name: Ansible Modules Demo
  hosts: localhost
  connection: local
  gather_facts: yes

  tasks:
    - name: Display system information
      debug:
        msg: "System: {{ ansible_distribution }} {{ ansible_distribution_version }}"

    - name: Create a directory
      file:
        path: /tmp/ansible-demo
        state: directory
        mode: "0755"

    - name: Copy a file
      copy:
        content: "Created by Ansible modules demo playbook\n"
        dest: /tmp/ansible-demo/info.txt
        mode: "0644"

    - name: Gather information about a file
      stat:
        path: /tmp/ansible-demo/info.txt
      register: file_info

    - name: Show file information
      debug:
        msg: "File created at {{ file_info.stat.mtime }}"

让我们运行这个 playbook:

cd ~/project/ansible-test
ansible-playbook modules-demo.yml

Playbook 执行以下操作:

  1. 显示有关你系统的信息
  2. /tmp/ansible-demo 处创建一个目录
  3. 创建一个具有自定义内容的文件
  4. 收集有关文件的信息
  5. 显示文件的修改时间

让我们将此步骤标记为完成,以便我们的验证脚本:

touch /tmp/ansible_modules_explored

你现在已经了解了 Ansible 配置、inventory 文件,并探索了各种模块。这些是有效使用 Ansible 的基本组成部分。

总结

在这个实验中,你已经成功学习了如何在 Ubuntu 系统上安装和升级 Ansible 到最新版本。你已经完成了几个关键任务:

  1. 了解了 Ansible 的基础知识及其版本控制系统
  2. 使用官方 PPA 存储库安装或升级了 Ansible
  3. 通过创建和运行一个简单的 playbook 验证了你的安装
  4. 探索了 Ansible 配置文件和 inventory 管理
  5. 了解了 Ansible 模块及其文档
  6. 创建并执行了更复杂的 playbook 来执行各种任务

这些技能为在自动化项目中与 Ansible 合作奠定了坚实的基础。通过保持你的 Ansible 安装是最新的,你可以利用最新的功能、错误修复和安全更新。

在你继续 Ansible 之旅时,你可以探索更高级的主题,例如角色(roles)、集合(collections)以及用于企业管理的 Ansible AWX/Tower。这些工具将帮助你构建更复杂的自动化工作流程并大规模管理基础设施。