我们希望听到您的意见!请帮助我们深入了解 Ansible 生态系统的现状。
参与 2024 年 Ansible 项目调查

动手体验 Ansible 集合

动手体验 Ansible 集合

我们之前在两篇博文中介绍了 Ansible 集合:“Ansible 内容集合入门”和“Ansible 内容交付的未来”。从本质上讲,Ansible 自动化内容将使用集合打包机制进行交付。Ansible 内容指的是 Ansible Playbook、模块、模块实用程序和插件。基本上,用户用来创建 Ansible 自动化的所有 Ansible 工具。内容分为两个存储库

  1. Ansible Galaxy (https://galaxy.ansible.com)
  2. Automation Hub (https://cloud.redhat.com/ansible/automation-hub)

Ansible Galaxy 是用于共享 Ansible 集合的上游社区。任何社区用户都可以创建一个命名空间并与任何人共享内容。Automation Hub 的访问权限包含在 Red Hat Ansible Automation Platform 订阅中。Automation Hub 仅包含来自 Red Hat 及其合作伙伴的完全支持和经过认证的内容。这使得 Red Hat 客户更容易确定哪些内容是官方认证的,更重要的是,受支持的内容。这包括来自 Arista、Cisco、Checkpoint、F5、IBM、Microsoft 和 NetApp 等合作伙伴的全部内容。

在这篇博文中,我们将逐步介绍一个用例,其中用户希望使用来自 Automation Hub 的 Red Hat 认证集合,并使用来自 Ansible Galaxy 的社区支持集合。

与 Ansible 集合和 Ansible 自动化交互的方法有很多种

  1. 安装到您的运行时环境或虚拟环境中
  2. 作为 SCM 树的一部分提供
  3. 使用需求文件

无论选择哪种方法,首先都需要找到、识别和获取要使用的 Ansible 集合。

Ansible Playbook 存储库结构

这是我为演示 Ansible 集合而设置的环境

Ajay blog one

  • ansible.cfg 是 Ansible 配置文件。我将在下一节中详细介绍。
  • collections 是一个目录,存储我的 Ansible Playbook 将使用的所有 Ansible 集合
  • inventory 是一个包含名为 hosts 的清单文件的目录
  • play.yaml 是我的 Ansible Playbook

对于我的示例,这是一个开发环境,我只想下载最新版本。我将使用 gitignore 文件忽略下载的内容,只跟踪需求文件。

Ajay blog two

此 gitignore 文件有助于确保版本控制系统中的 playbook 存储库内容仅跟踪您的 playbook 和相关文件。如果要跟踪 SCM 中使用的 Ansible 集合,只需删除 Git 忽略(例如,引言中的 **2- 作为 SCM 树的一部分提供**)。有关使用集合和文件夹结构的更深入了解,请参阅 文档

配置对 Automation Hub 和 Galaxy 的访问

要访问 Automation Hub 中的认证内容,您需要先获取用于身份验证的令牌。为此,请登录 https://cloud.redhat.com,然后导航到 https://cloud.redhat.com/ansible/automation-hub/token

Ajay blog three

单击加载令牌按钮将显示您的身份验证令牌。将此信息保存到某个位置,我们需要将其输入到 ansible.cfg 文件中。Ansible Galaxy 也有一个用于身份验证的 API 令牌,可以通过登录后导航到 https://galaxy.ansible.com/me/preferences 来访问。

Ajay blog five

单击显示 API 密钥按钮以显示您的 API 密钥。

配置您的 Ansible.cfg

我们在 Ansible 配置文件(即 *ansible.cfg)的 **[galaxy]** 部分下定义 Galaxy 服务器。* Ansible 配置文件是一个 ini 格式的文件,用于配置行为设置。这包括更改从 JSON 到 YAML 的返回输出等设置。如果您不熟悉 Ansible 配置文件,请参阅 文档。提醒一下,Ansible 配置文件按以下顺序搜索:

  1. ansible.cfg(在当前目录中)
  2. \~/.ansible.cfg(在当前主目录中)
  3. /etc/ansible/ansible.cfg

现在应将这些令牌添加到 ansible.cfg 文件中。下面显示了一个示例。建议在使用多个 Galaxy 服务器时,将它们列在 server_list 中。列表应按优先级顺序排列,您的主要位置选择放在首位,在本例中为 Automation Hub。

[defaults]
stdout_callback = yaml
inventory = inventory/hosts
collections_paths = ./collections

[galaxy]

server_list = automation_hub, release_galaxy

[galaxy_server.automation_hub]
url=https://cloud.redhat.com/api/automation-hub/
auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

[galaxy_server.release_galaxy]
url=https://galaxy.ansible.com/
token=xxxxxxxxxxxxxxxxxxxxxx

请注意定义 Automation Hub 存储库和身份验证端点的 urlauth_url 密钥。另请注意,此文件定义了通过 collections_paths 参数(例如 ./collections)将集合下载到何处。有关 Ansible Galaxy 和 Automation Hub 配置的更多信息,请参阅 Galaxy 用户指南

使用需求文件

在本例中,我将使用 requirements.yml 方法,可以通过该方法从单个列表安装所有集合。如果您熟悉使用 requirements.yml 文件与角色,则该文件对于集合而言非常相似。通过示例可以更好地理解这一点

» cat collections/requirements.yml
collections:
  - name: junipernetworks.junos
    source: https://galaxy.ansible.com

  - name: f5networks.f5_modules
    source: https://cloud.redhat.com/api/automation-hub/

在这里,我们定义了测试 playbook 所需的 2 个集合。Juniper Networks junos 集合是从 Ansible Galaxy 下载的,而 F5 Networks f5_modules 集合是从 Automation Hub 下载的。

安装集合

现在可以使用以下命令安装集合

ansible-galaxy collection install -r collections/requirements.yml

以详细模式运行此命令可以帮助我们查看正在访问的端点

Ajay Blog seven

要测试这些新集合中模块的可用性,可以使用 ansible-doc 命令

ansible-doc f5networks.f5_modules.bigip_device_info

我们简单的 playbook 将从 Juniper 和 F5 设备收集事实 (https://github.com/termlen0/collections_demo/blob/master/play.yaml)。我们可以通过从命令行运行它来测试 playbook

Ajay blog eight

如果您不想每次都动态加载最新的集合内容,请注释掉或删除需求文件。这意味着您可以通过手动将 Ansible Playbook 所需的每个集合安装到正确的虚拟环境中来控制哪些 Ansible 集合可用。例如,要安装 F5 Networks 集合,您将执行此命令

ansible-galaxy collection install f5networks.f5_modules

另一种方法是在 SCM(源代码管理)中将所需的集合与其他内容一起打包。这意味着您将在开发环境中同步集合,而不是在 Ansible Tower 设备中同步。

将来,我们将引入一种更标准化的方式来打包集合以及特定的 Ansible 版本及其依赖项。

结论

Ansible 集合引入了一种有效地模块化和打包自动化内容的方法。Red Hat Automation Hub 托管经过验证和 Red Hat 支持的经过认证的安全集合。Ansible Galaxy 托管社区贡献的集合。客户可以访问这两个内容存储库中的集合。我认为集合是 Ansible 采用的“包含电池”方法的超级增压器。它提升了构建自动化过程中涉及的细微差别,使用户能够即插即用由认证合作伙伴和社区构建的最新最好的自动化内容。