什么是 Ansible 角色?它是怎么用的?

复制 URL

Ansible® 角色是 Ansible 自动化的一个独立、可移植的单元,也是按已知文件结构对相关任务以及关联的变量、文件、处理程序和其他资产进行分组的首选方法。虽然自动化任务可以完全在 Ansible Playbook 中编写,但借助 Ansible 角色,您可以捆绑自动化内容,而且这些捆绑包可以在一个或多个 play 中运行,在不同 playbook 中重复使用,以及按集合形式与其他用户共享。

Ansible 角色用 YAML 表示,这是一种用于编写配置文件的人类可读数据序列化语言。当任务或 play 中包含一个角色时,Ansible 会在 8 个标准角色目录中的至少 1 个目录下查找 main.yml 文件。这些目录(如下所示,附带了说明性注释)包括角色任务、处理程序、模块、默认值、变量、文件、模板和元数据。

roles/ common/ # this hierarchy represents a "role" tasks/ # main.yml # <-- tasks file can include smaller files if warranted handlers/ # main.yml # <-- handlers file templates/ # <-- files for use with the template resource ntp.conf.j2 # <------- templates end in .j2 files/ # bar.txt # <-- files for use with the copy resource foo.sh # <-- script files for use with the script resource vars/ # main.yml # <-- variables associated with this role defaults/ # main.yml # <-- default lower priority variables for this role meta/ # main.yml # <-- role dependencies library/ # roles can also include custom modules module_utils/ # roles can also include custom module_utils lookup_plugins/ # or other types of plugins, like lookup in this case webtier/ # same kind of structure as "common" was above, done for the webtier role monitoring/ # "" fooapp/ # "" 

您可以在 playbook 中调用 Ansible 角色,方法包括使用 roles 选项将其列出,或者使用 include_role 或 import_role 命令在角色任务部分进行添加。使用 roles 选项列出的角色或使用 import_role 添加的角色会在 play 中的任何其他任务之前运行,而使用 include_role 添加的角色会按照任务列表中定义的顺序运行。

Ansible 角色和 Ansible Playbook 都是用于组织和执行自动化任务的工具,但各自有不同的用途。是选择创建 Ansible 角色,还是在 Ansible Playbook 中编写所有任务?一切取决于您的具体用例和使用 Ansible 的经验。

大多数自动化开发人员和系统管理员都会从单个 playbook 开始创建自动化内容。Playbook 是针对定义的清单执行的自动化任务列表。任务可以组织成一个 play,其中包含一个或多个任务,分别映射到特定的主机并按顺序执行。一个 playbook 则可以包含一个或多个 play,为在单个文件中执行 Ansible 自动化提供了灵活的机制。

虽然 playbook 是对使用 Ansible 实现自动化的强大助力,但在一个 playbook 中编写所有任务并不一定是上佳之策。对于范围和变量更复杂的自动化任务,并且涉及重复使用的情况下,将自动化内容组织成可重用的 Ansible 角色,并在 playbook 中进行调用可能是更合适的选择。

下面的示例演示了如何在 playbook 中使用角色 linux-systemr-roles.timesync。在本例中,使用单个角色能够实现的功能,如果采用其他方法可能需要超过 4 个任务。

- name: Manage timesync with 3 servers hosts: targets vars: timesync_ntp_servers: - hostname: foo.example.com iburst: true - hostname: bar.example.com iburst: true - hostname: baz.example.com iburst: true roles: - linux-system-roles.timesync 

相比把所有自动化内容糅合进单个 playbook,使用 Ansible 角色具有诸多优势:

可重用性和共享

角色设计为可重复使用的自动化单元。由于角色可帮助您将自动化任务的逻辑分组从单个 play 或 playbook 的上下文中分离出来,您可以在多个 play 中或跨 playbook 重复使用这些角色,以及进行共享以便在其他项目中重复使用。

模块化

使用角色将促进采用模块化的自动化方法,其中每个角色负责特定的功能。借助这种方法,可以更轻松的理解和维护自动化代码,以及对其进行故障排除。

组织

Ansible 角色提供了一种结构化方式来组织任务、模板、文件和变量。在这种结构下,与特定角色相关的所有内容都包含在其目录中,从而更便于管理复杂的自动化设置。

参数化

您可以为角色定义默认变量,而且在 Ansible Playbook 中使用该角色时,可以覆盖这些变量。这样就可以更轻松地根据不同的环境或用例定制角色的行为,而无需修改角色本身。

版本控制和依赖项管理

您可以对角色进行版本控制,还可以在角色内的 meta/main.yml 文件中指定角色依赖项。因此,您可以清楚地管理版本和依赖项,确保在不同环境中的稳定性和一致性。

测试

角色结构使测试方法更容易应用。在将特定角色集成到更大的 playbook 之前,您可以编写针对该角色的测试,以确保其行为符合预期。

简单性

对于较大或较复杂的项目,角色可简化 Ansible Playbook 的使用。您不必用一个大型 playbook 包含所有任务、处理程序和模板 ,只用编写一个更简洁的 playbook,让用户可以轻松读懂。这样也更容易确定可在新项目中重复使用的角色,从而加快编写自动化内容的速度并简化工作流。 

红帽 Ansible 自动化平台新手指南

您可以使用 ansible-galaxy role init role_name 命令创建一个新角色,这将构建一个遵循标准角色目录结构的目录。验证目录后,便可以定义任务、默认变量和其他组件。您还可以在 README.md 文件和 meta/main.yml 中添加文档,尽管这不是角色正常运行所必需的。

创建新角色可能需要更高水平的 Ansible 经验,如果团队是构建自动化内容的初学者,这可能是一个挑战。想要方便创建内容,新手和经验丰富的自动化开发人员都可以利用红帽® Ansible Lightspeed with IBM watsonx Code Assistant,这是一种生成式人工智能服务,可根据 Ansible 最佳实践提供代码建议。您可以使用自然语言提示,描述希望实现的自动化,并获取来自 Ansible Lightspeed with watsonx Code Assistant 的单任务和多任务内容建议。然后,就可以将生成的任务包含在 Ansible 角色或 playbook 中。

Ansible Lightspeed with watsonx Code Assistant 可以减少创建、维护和改进 Ansible 代码所需的工作量,从而提高生产力并加快采用速度。 

Ansible 角色的共享方式简单易操作,因此您可以将维护良好、经过测试的角色融入自动化内容。角色可以使用以下存储库进行共享:

  • Ansible Galaxy - 一个免费的存储库,用于与更大的 Ansible 社区共享角色和其他 Ansible 内容。角色可以通过命令行(CLI)上传到 Ansible Galaxy,而集合则可以通过 Web 界面共享。由于 Ansible Galaxy 是一个社区网站,所以内容并未经红帽审核、认证或支持,需要用户自行甄别。
  • Ansible 自动化中心Ansible 自动化中心包含在红帽 Ansible 自动化平台订阅中,是一个用于查找、下载和共享 Ansible 内容集的中央存储库。Ansible 自动化中心由红帽托管,包含来自红帽和我们的独立软件供应商(ISV)合作伙伴的经过认证和验证的内容。
  • 私有自动化中心 - 作为一种本地存储库,私有自动化中心允许组织在内部管理、共享和策划内容,是您组织的专属存储库。您可以在企业内部共享角色和其他自动化内容,从而帮助团队简化工作流并加快自动化进程。 

红帽 Ansible 自动化平台是一个统一的平台,旨在帮助企业利用自动化实现加速、协调和创新。订阅红帽资源后,您可以在 Ansible 自动化中心获取红帽认证内容集和 Ansible 验证内容。

您的订阅还包括红帽 Ansible Lightspeed with IBM watsonx Code Assistant,它可简化编写和改进 Ansible 角色中包含的任务的流程,从而帮助自动化团队更有效地创建内容。Ansible Lightspeed 已完全集成到 Visual Studio Code 中,可满足自动化开发人员的需求,包括创建与最佳实践相一致的 Ansible 角色和 playbook,而无需在开发环境之间切换。

Ansible Lightspeed 还提供内容源匹配功能,以便查看源培训数据以获取其提供的建议,并在为用户创建角色时做出更好的决策。Ansible Lightspeed 会根据来自 Ansible 社区的数以千计的角色和 Red Hat 提供的数据点进行模型训练,让您能够准确、透明地创建和改进 Ansible 代码,从而满足组织需求并加快采用速度。

扩展阅读

文章

Ansible 基础知识入门

Ansible 是一种对 IT 流程自动化的工具,如置备和配置管理等流程。希望能通过这篇 Ansible 关键概念的介绍,帮助您了解 Ansible 的基础知识。

文章

什么是业务流程管理?

业务流程管理(BPM)是指对端到端业务流程进行建模、分析和优化,以实现战略业务目标。

文章

为什么选择红帽实现自动化?

红帽 Ansible 自动化平台中包含了在团队间分享自动化以及实现企业级自动化所需的各种工具。

详细了解自动化

产品

红帽的战略顾问将从大局出发,以战略性视角审视企业发展,分析您当前面临的业务挑战,并提供全面、低成本、高效益的解决方案,帮助您轻松应对各项挑战。

无论您处于自动化之旅的哪个阶段,这个实施企业级自动化的平台都能助您一臂之力

相关资源

培训

免费培训课程

Ansible 必备:轻松实现自动化之技术概览

免费培训课程

针对 SAP 的红帽 Ansible 自动化