Ansible.utils 集合入门:面向剧本编写的实用工具
第一部分:面向剧本编写的 Ansible.utils 集合
Ansible ansible.utils
集合包含各种插件,这些插件可帮助 Ansible 剧本开发人员管理、操作和查看数据。此集合最常见的用例是在您需要处理 Ansible 剧本、清单或模块返回的复杂数据结构时。请参阅每个插件的 文档 页面,了解如何在任务中使用这些实用工具的详细示例。在本博文的两部分中,我们将概述第一部分的此集合,并在第二部分中详细了解使用 utils 集合的示例用例。
ansible.utils 中的插件
插件是增强 ansible 核心功能的代码。此代码在控制节点上执行,并为 Red Hat Ansible 自动化平台的核心功能提供选项和扩展。此 ansible.utils
插件集合包括
- 过滤器插件
- 查找插件
- 测试插件
- 模块
过滤器插件
过滤器插件操作数据。使用正确的过滤器,您可以提取特定值、转换数据类型和格式、执行数学计算、拆分和连接字符串、插入日期和时间等等。Ansible 自动化平台使用与 Jinja2 一起提供的 标准过滤器,并添加一些专门的过滤器插件。您可以 创建自定义 Ansible 过滤器作为插件。有关更多信息,请参阅 文档。
ansible.utils
过滤器插件包括以下内容:
- ansible.utils.from_xml - 将给定的 XML 字符串转换为本机 python 字典。
- ansible.utils.get_path - 使用路径检索变量中的值
- ansible.utils.index_of - 查找列表中与某些条件匹配的项目的索引
- ansible.utils.param_list_compare - 通过组合/比较基本参数和提供的参数来生成最终的参数列表。
- ansible.utils.to_paths - 将复杂对象展平为路径和值的字典
- ansible.utils.to_xml - 将给定的 JSON 字符串转换为 XML
- ansible.utils.usable_range - 展开可用的 IP 地址
- ansible.utils.validate - 使用提供的条件验证数据
查找插件
查找插件是 Jinja2 模板语言的 Ansible 特定扩展。您可以使用查找插件在剧本中访问来自外部源(文件、数据库、键值存储、API 和其他服务)的数据。与所有 模板 一样,查找在 Ansible 自动化平台控制机器上执行和评估。Ansible 使用标准模板系统使查找插件返回的数据可用。您可以使用查找插件从外部源加载变量或模板。您还可以 创建自定义查找插件。有关更多信息,请参阅 文档。
ansible.utils
查找插件包括:
- ansible.utils.get_path - 使用路径检索变量中的值
- ansible.utils.index_of - 查找列表中与某些条件匹配的项目的索引
- ansible.utils.to_paths - 将复杂对象展平为路径和值的字典
- ansible.utils.validate - 使用提供的条件验证数据
注意:在 ansible.utils
中,一些插件被同时实现为过滤器和查找插件,以便剧本开发人员根据其用例灵活选择。
测试插件
测试插件评估模板表达式并返回 True 或 False 值。使用测试插件,您可以创建 条件 来实现任务、块、剧本、剧本和角色的逻辑。Ansible 自动化平台使用作为 Jinja 的一部分提供的标准测试,并添加一些专门的测试插件。有关更多信息,请参阅 文档。
ansible.utils
测试插件包括:
- ansible.utils.in_any_network - 测试 IP 或网络是否在任何网络中
- ansible.utils.in_network - 测试 IP 地址是否在网络中
- ansible.utils.in_one_network - 测试 IP 地址是否属于列表中的任何一个网络
- ansible.utils.ip - 测试 IP 地址或网络中的内容
- ansible.utils.ip_address - 测试 IP 地址中的内容
- ansible.utils.ipv4 - 测试内容是否为 IPv4 地址或网络
- ansible.utils.ipv4_address - 测试内容是否为 IPv4 地址
- ansible.utils.ipv4_hostmask - 测试地址是否为有效的主机掩码
- ansible.utils.ipv4_netmask - 测试地址是否为有效的网络掩码
- ansible.utils.ipv6 - 测试内容是否为 IPv6 地址或网络
- ansible.utils.ipv6_address - 测试内容是否为 IPv6 地址
- ansible.utils.ipv6_ipv4_mapped - 测试内容是否似乎是映射的 IPv6 到 IPv4 映射地址
- ansible.utils.ipv6_sixtofour - 测试内容是否似乎是 6to4 地址
- ansible.utils.ipv6_teredo - 测试内容是否似乎是 IPv6 teredo 地址
- ansible.utils.loopback - 测试 IP 地址是否为环回地址
- ansible.utils.mac - 测试内容是否似乎是有效的 MAC 地址
- ansible.utils.multicast - 测试多播 IP 地址
- ansible.utils.private - 测试 IP 地址是否为私有地址
- ansible.utils.public - 测试 IP 地址是否为公有地址
- ansible.utils.reserved - 测试保留的 IP 地址
- ansible.utils.resolvable - 测试 IP 或名称是否可以通过 /etc/hosts 或 DNS 解析
- ansible.utils.subnet_of - 测试网络是否为另一个网络的子网
- ansible.utils.supernet_of - 测试网络是否为另一个网络的超网
- ansible.utils.unspecified - 测试未指定的 IP 地址
- ansible.utils.validate - 使用提供的条件验证数据
模块
模块是 Ansible 剧本的主要构建块。虽然我们通常不谈论“模块插件”,但模块是一种插件。有关模块与其他插件之间差异的以开发人员为中心的描述,请参阅 模块和插件:有什么区别?。有关更多信息,请参阅 文档。
ansible.utils
模块包括:
- ansible.utils.cli_parse - 使用各种解析器解析 cli 输出或文本
- ansible.utils.fact_diff - 查找当前设置的事实之间的差异
- ansible.utils.update_fact - 更新当前设置的事实
- ansible.utils.validate - 使用提供的条件验证数据
访问和使用 ansible.utils 集合
要下载 utils 集合,请参阅自动化中心(完全支持,需要 Red Hat Ansible 自动化平台订阅)或 Ansible Galaxy(上游)
-
自动化中心集合:
ansible.utils
-
Ansible Galaxy 集合:
ansible.utils
Ansible.utils 也在支持的执行环境中提供,以及它所需的 python 库。有关执行环境的更多详细信息,请参阅 文档。
Utils 的不同用例
众所周知,ansible.utils
包含各种插件,并具有多种用例。以下是 ansible.utils
最常见的用例。
- 使用 validate 和 test 插件在推送配置之前验证业务逻辑
- 使用 test 插件审核架构部署和布局
- 使用
get_path
、to_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
验证引擎,但计划添加更多验证引擎。
- 目前,validate 插件仅支持
-
支持不同的过滤器插件来操作输入数据
- 递归插件:
remove_keys
、replace_keys
、keep_keys
- 递归插件:
为该集合做出贡献
该集合适用于不特定于平台或学科的插件。简单的插件示例应该具有通用性。更复杂的示例可以包括现实世界的平台模块,以演示插件在 playbook 中的实用性。
我们欢迎社区为该集合做出贡献。如果您发现问题,请在 ansible.utils 集合存储库 中打开问题或创建 PR。有关完整详细信息,请参阅 为 Ansible 维持的集合做出贡献。有关为 Ansible 做出贡献的详细信息,请参阅 Ansible 社区指南。
要点和后续步骤
-
ansible.utils
插件使 playbook 的编写体验变得简单而流畅 ansible.utils
插件的实施速度非常快,因为它们在本地执行- 易于理解、编码、使用并与其他模块集成
- 作为其插件生态系统,在
ansible.utils
中添加新插件非常容易