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

迁移到 Ansible Collections 网络研讨会

迁移到 Ansible Collections(网络研讨会问答)

Sean Cavanaugh、Anshul Behl 和我最近举办了一场名为“迁移到 Ansible Collections”的网络研讨会。以下是 按需网络研讨会重播 的链接。此次网络研讨会侧重于帮助想要迁移到 Ansible Collections 精彩世界的 Ansible Playbook 编著者,他们希望在现有的 Ansible 2.9 环境和更高版本中进行迁移。

网络研讨会的受欢迎程度远远超出了我们的预期,以至于我们没有足够的时间回答所有问题,因此我们收集了所有问题,并将其发布到这篇博客文章中,以便所有人都能看到。

我想使用 Ansible 通过 REST API 自动化应用程序(例如创建新的 Bitbucket 项目)。我应该编写角色还是自定义模块?然后应该将它发布为 Collection 吗?

这取决于您希望对要开发的模块或角色进行多少投资。例如,可以评估创建引用内置 Ansible URI 模块的角色,与创建用 Python 编写的 Ansible 模块进行比较。如果您要创建模块,它可以通过您或 playbook 作者开发的角色来使用。有时,可能会更喜欢独立的角色,具体取决于与 REST API 端点交互的具体功能或要求。总的来说,重要的是保持清晰的资源/模块映射,并尽可能避免操作/模块。不幸的是,这里没有绝对正确或错误的答案(“这取决于 Ansible 用户的看法”),无论如何,都可以开发 Ansible 模块和/或 Ansible 角色,然后将其包含到 Collection 中,以便在 Ansible playbook 中使用。Collection 是用于分发 Ansible 内容的标准方式,其中包括角色和模块。

我们什么时候才能在离线环境中使用 requirements.yml 文件安装 Collection?角色似乎可以使用 Git 存储库作为上游,但对于 Collection,它似乎还无法正常工作,而且我总是需要在线查找 galaxy.ansible.com。也就是说,我能否使用 GitHub URL(如在角色中使用的那样)?

您可以将 ansible-galaxy CLI 客户端指向不同的源以拉取 Collection,请查看 以下文档页面。请注意,从 GitHub(或其他源)拉取 Collection 不受 Ansible 自动化平台的官方支持。即使使用社区 Collection,也最好从 Ansible Galaxy 安装。

某些模块需要额外的 Python 包,例如 VMware 模块的 pyvmomi。Collection 以后是否能够包含此 Python 代码使其正常工作?

将来,我们将拥有名为 Ansible Execution Environments 的容器化技术,它位于 Collection 之上的抽象层,允许安装操作系统级组件。在 AnsibleFest 上有一些关于此技术的演讲,以及一篇关于 Ansible Builder 的博客文章,但目前只能使用 venv,很快(tm)将支持 Execution Environments。

ansible-doc 什么时候才能显示 Collection 的文档?使用 FQCN 与 ansible-doc 一起使用目前还无法正常工作。

ansible-doc 目前支持 FQCN;查看详细日志以查看 ansible-doc 是否在发现 Collection 时遇到一些问题。例如,以下命令可以正常运行

$ ansible-doc infoblox.nios_modules.nios_a_record

Ansible Execution Environments 如何协同工作?

此主题目前处于非常活跃的开发阶段,将在即将发布的博客文章、网络研讨会和文档中介绍。敬请期待,我们会发布更多信息。

是否有任何专门针对网络自动化的资源?我一直无法为非标准网络设备创建 playbook。我感觉网络方面的在线文档不足。

请查看我们的 网络入门指南。目前,Ansible 连接插件(如 network_clinetconfhttpapi)已支持超过 75 个网络平台。此外,使用 cli_command 和 cli_config,通用模块可能会有所帮助。请查看 github.com/ansible/workshops,看看是否有助于您的搜索。此外,直接联系网络设备供应商可能会有所帮助,因为他们可能提供私有的 Ansible 内容。

Ansible 2.10 什么时候才能通过 yum 在 Red Hat Linux 上使用?    

Ansible 2.10 不会以 RPM 格式在下游提供,有关详细信息,请参阅以下链接:https://access.redhat.com/articles/5392421

什么时候 Collection 将成为硬性要求,而旧方式(2.9 或更早版本)将被弃用?

2.10 及更高版本需要 Collection,但如果 2.9 中存在现有内容已迁移出来,那么当前的 playbook 应该可以正常工作,因为它们使用 2.10 发行版中的全局 runtime.yml 文件。这就是为什么我们专注于 2.9 + Collection 以延长过渡过程的原因。

为了将来能够使用,我可以在 2.9 中实现它并使用 FQCN 吗?

是的,应该可以,假设这些 Collection 要么是从 Ansible 2.9 迁移的,要么经过测试以确保它们是全新的。

您也可以直接在 playbook 的顶部添加 collections: cyberark,对吧?您能展示一下它应该是什么样子吗?

您需要指定特定的 Cyberark namespace.collection,而不仅仅是您提到的 Cyberark namespace。我们还建议不要使用 collections 关键字,而应改为在每个任务中使用完全限定的 Collection 名称(FQCN)(请参阅幻灯片中的说明)。

使用 collections 关键字

webinar Q&A blog 1

使用推荐的方式 FQCN(完全限定的 Collection 名称)

Webinar Q&A blog 2

在我们的环境中,我们的客户依赖于 CLI,因为 CLI 的开发速度更快,例如 aws-cli。我们是否预计像 AWS 这样的供应商会更快地向 Collection 方面做出贡献?

Ansible 工程团队实际上维护所有 AWS Ansible 内容,并且通常具有“CLI 优先”或“API 优先”的理念,但总的来说,参与的供应商在为新功能更新其 Collection 方面做得很好!Ansible Collection 的目标之一是让合作伙伴和认证内容能够比 Ansible 自动化平台版本更快地异步迁移,这意味着社区和客户将更快地获得新内容。

使用 Automation Hub 需要哪些站点许可证?  

任何 Red Hat Ansible 自动化平台订阅都将提供对 Automation Hub 的访问权限,以及在您的环境中运行私有 Automation Hub 的功能。

Ansible Execution Environment 计划何时发布?   

预计在明年(2021 年)年中作为产品的一部分发布,但部分组件将开始在 上游不断发布。

如果所有模块都将迁移到 Collection [ansible.builtin] 等,那么 Base/Core 部分还包含哪些内容?   

嗯,一些模块仍然会保留在里面,因此被称为“builtin”,但它们也可能会异步迁移。但是,有很多代码在运行实际的 Ansible 可执行文件,包括我们如何进行并行处理、条件、循环、块等构造,以及更多。其中许多是许多 Ansible 用户不会真正与之交互的内容(可以将其视为汽车中的发动机)。

是否可以在同一个代码库中使用多个版本的 Collection?(即在 playbook 级指定版本)

目前还没有这个选项,您无法在 playbook 中固定 Collection 版本,这在使用 venv 或将来的 Execution Environments 时可能会非常理想。

私有 Automation Hub 是否可以作为二进制存储库(如 Artifactory 或 Nexus)中的存储库?

不能,私有 Automation Hub 利用 cloud.redhat.com 中的相同内容类型。构建并发布到 Automation Hub 的 Ansible Collection 压缩包会解压缩,并显示其内容。

我能否在 CentOS8 上使用 Ansible Collection?

如果 Ansible 2.9 可在 CentOS8(或任何其他 Linux 发行版)上安装,那么 Collection 可以在那里使用。

Galaxy 会被弃用还是将来仍然可以使用? 

Galaxy 仍然是发布和下载社区 Ansible Collection 的当前场所!

Ansible 2.9 不支持使用私有存储库作为 Collection 的占位符,对吧?

您可以使用私有 Automation Hub 指向您自托管实例以存放您的 Collection,并管理和控制您的组对哪些内容有访问权限。

私有 Automation Hub 是独立的还是可以集群化部署?

它目前仅提供独立版本,但将来可能会支持集群。

FQCN 如何使用 Collection 而不是常规映射模块(在 2.9 中)?

FQCN 代表完全限定的 Collection 名称,它始终指向 Collection,而不是标准 Ansible 2.9 安装中的模块,因为它们位于 Ansible 控制节点上的不同位置。

Execution Environments 和 Red Hat Ansible Tower 中处于技术预览阶段的容器隔离组之间有什么区别?

容器隔离组使用相同的执行原则。最简单的理解方式是,您可以将容器组视为建立在“Execution Environments v0.1”基础之上。当 Execution Environments 发布后,它将远远优于容器组。

是否有方法下载最新版本的 Collection?或者您是否会自动获得最新版本?

最新版本会自动拉取,但您也可以指定确切的版本。 您不需要使用 :latest - 只要没有像“-beta”或预发布版本(使用连字符)这样的内容作为版本的一部分,您就会自动获得最新版本,这些版本不被视为 GA 版本(并且会被跳过)。

[webinar Q&A blog 3

对于我们自己编写的角色,是否有或将来是否会有将相关角色组织成集合的方法?

多个角色可以被组织成一个集合,目前作为 /roles 目录的一部分。

我所看到的所有关于集合的内容都是如何使用它们(来自 Galaxy 或其他来源)。 有没有关于如何编写我们自己的集合的文档/参考?

当然! 请查看 开发者指南

自动化中心是否会包含官方/主要的供应商模块? 例如 NetApp 或 Dell 模块。

是的,它现在已经包含了,我们有一个认证计划,并且已经获得了来自许多供应商(如 Dell 和 Netapp)的认证内容。 自动化中心包含所有支持的和认证的集合,有一个公开的知识库列出了它们,请查看 https://access.redhat.com/articles/3642632[.

如果我选择试用 Ansible Automation Platform,它是否允许访问自动化中心?

是的,它作为订阅的一部分,Ansible Automation Platform 订阅包含试用的所有内容,包括所有组件以及与 cloud.redhat.com 和 Red Hat 客户门户网站上的服务的连接。

从 ansible-galaxy CLI 删除集合的功能是否即将推出,还是我们仍然需要进入集合目录手动删除它?

目前,这是删除集合的唯一方法。  您可以使用 强制标志覆盖集合。

我们可以在默认的 ~/.ansible/collections 之外安装集合吗?

是的,您可以将它们放在任何地方,但请确保控制节点知道它们在路径中的位置。 例如:ansible-galaxy install -p /path/to/collections namespace.collection相关文档.

我可以检查服务器上现有集合的版本吗?

对于 Ansible 2.10 及更高版本,ansible-galaxy collection list 命令提供集合和版本的列表。

为了在 RHV 中添加一个新主机,我不得不将 Ansible 版本降级到 2.9.13,否则它无法工作(Red Hat 已知的错误)。 在哪个 2.9 版本中该错误会被解决?

您是否有可以让我们查看的 GitHub 问题? 我们可以确保跟进。 错误通常在 GitHub Ansible 项目中进行跟踪,那里的对话应该可以帮助您了解时间表。

对于那些对任何变化都毫无兴趣的用户来说,未来的道路是什么? 我一直在努力改变部门文化,使其更加自动化友好,已经有一两年了,而这将使我有效地回到原点,甚至更糟。 抗拒变化的企业不喜欢在他们准备实施变革时进行重大变革。

我们认为我们创造了一种双赢的局面,客户和社区成员现在可以使用集合并更快地获得新内容,同时保持与现有 Ansible 自动化的向后兼容性。  虽然我们鼓励大家开始使用集合并使用 FQCN 编写 Ansible 剧本,但在客户被要求使用它们之前还有一段很长的时期。  Red Hat 提供长期支持选项/产品,因此您无需在相当长的时间内强制更改。 对于订阅用户,Ansible 2.9 将比最初计划的更长久地得到支持。

Ansible 是否有一组路径来检查基本 Ansible 中定义的 runtime.yml?

重定向规则目前遵循优先级,在以下两个文件之间形成瀑布关系

  1. 作为 Ansible 发行版的一部分的内置 runtime.yml 文件。 在本例中,Ansible 2.10 内置的 runtime.yml。 此文件首先被咨询。
  2. 作为实际集合一部分的 runtime.yml 文件,作为 /meta/runtime.yml。 此文件接下来被咨询。