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

Ansible.utils 集合入门:面向剧本编写的实用工具

第一部分:面向剧本编写的 Ansible.utils 集合

Ansible ansible.utils 集合包含各种插件,这些插件可帮助 Ansible 剧本开发人员管理、操作和查看数据。此集合最常见的用例是在您需要处理 Ansible 剧本、清单或模块返回的复杂数据结构时。请参阅每个插件的 文档 页面,了解如何在任务中使用这些实用工具的详细示例。在本博文的两部分中,我们将概述第一部分的此集合,并在第二部分中详细了解使用 utils 集合的示例用例。

ansible.utils 中的插件

插件是增强 ansible 核心功能的代码。此代码在控制节点上执行,并为 Red Hat Ansible 自动化平台的核心功能提供选项和扩展。此 ansible.utils 插件集合包括

  • 过滤器插件
  • 查找插件
  • 测试插件
  • 模块

过滤器插件

过滤器插件操作数据。使用正确的过滤器,您可以提取特定值、转换数据类型和格式、执行数学计算、拆分和连接字符串、插入日期和时间等等。Ansible 自动化平台使用与 Jinja2 一起提供的 标准过滤器,并添加一些专门的过滤器插件。您可以 创建自定义 Ansible 过滤器作为插件。有关更多信息,请参阅 文档

ansible.utils 过滤器插件包括以下内容:

查找插件

查找插件是 Jinja2 模板语言的 Ansible 特定扩展。您可以使用查找插件在剧本中访问来自外部源(文件、数据库、键值存储、API 和其他服务)的数据。与所有 模板 一样,查找在 Ansible 自动化平台控制机器上执行和评估。Ansible 使用标准模板系统使查找插件返回的数据可用。您可以使用查找插件从外部源加载变量或模板。您还可以 创建自定义查找插件。有关更多信息,请参阅 文档

ansible.utils 查找插件包括:

注意:在 ansible.utils 中,一些插件被同时实现为过滤器和查找插件,以便剧本开发人员根据其用例灵活选择。

测试插件

测试插件评估模板表达式并返回 True 或 False 值。使用测试插件,您可以创建 条件 来实现任务、块、剧本、剧本和角色的逻辑。Ansible 自动化平台使用作为 Jinja 的一部分提供的标准测试,并添加一些专门的测试插件。有关更多信息,请参阅 文档

ansible.utils 测试插件包括:

模块

模块是 Ansible 剧本的主要构建块。虽然我们通常不谈论“模块插件”,但模块是一种插件。有关模块与其他插件之间差异的以开发人员为中心的描述,请参阅 模块和插件:有什么区别?。有关更多信息,请参阅 文档

ansible.utils 模块包括:

访问和使用 ansible.utils 集合

要下载 utils 集合,请参阅自动化中心(完全支持,需要 Red Hat Ansible 自动化平台订阅)或 Ansible Galaxy(上游)

​​Ansible.utils 也在支持的执行环境中提供,以及它所需的 python 库。有关执行环境的更多详细信息,请参阅 文档

Utils 的不同用例

众所周知,ansible.utils 包含各种插件,并具有多种用例。以下是 ansible.utils 最常见的用例。

  • 使用 validate 和 test 插件在推送配置之前验证业务逻辑
  • 使用 test 插件审核架构部署和布局
  • 使用 get_pathto_path 插件在 Ansible playbook 中管理复杂的数据结构
  • 使用 test 插件执行与网络地址相关的次要检查
  • 使用 cli_parse、validate 插件进行操作状态评估

未来范围

以下是一些正在开发中的 ansible.utils 功能

  • Ipaddr 过滤器插件支持

    • Ipaddr 过滤器旨在为 Ansible 内部提供对 netaddr Python 包的接口。
    • 它可以对字符串或项目列表进行操作,测试各种数据以检查它们是否为有效的 IP 地址,并操作输入数据以提取所需的信息。
    • ipaddr() 支持各种形式的 IPv4 和 IPv6 地址。
    • 还有其他可用的函数来操作 IP 子网和 MAC 地址。
    • 我们目前正在努力将 ipaddr 过滤器作为 ansible.utils 集合的一部分。
  • 在 ansible.utils.validation 插件中支持更多数量的验证引擎

    • 目前,validate 插件仅支持 ansible.utils.jsonschema 验证引擎,但计划添加更多验证引擎。
  • 支持不同的过滤器插件来操作输入数据

    • 递归插件:remove_keysreplace_keyskeep_keys

为该集合做出贡献

该集合适用于不特定于平台或学科的插件。简单的插件示例应该具有通用性。更复杂的示例可以包括现实世界的平台模块,以演示插件在 playbook 中的实用性。

我们欢迎社区为该集合做出贡献。如果您发现问题,请在 ansible.utils 集合存储库 中打开问题或创建 PR。有关完整详细信息,请参阅 为 Ansible 维持的集合做出贡献。有关为 Ansible 做出贡献的详细信息,请参阅 Ansible 社区指南

要点和后续步骤

  • ansible.utils 插件使 playbook 的编写体验变得简单而流畅
  • ansible.utils 插件的实施速度非常快,因为它们在本地执行
  • 易于理解、编码、使用并与其他模块集成
  • 作为其插件生态系统,在 ansible.utils 中添加新插件非常容易