跳至主要内容

OpenTofu 发布候选版本,正式发布日期为 1 月 10 日

Roni Frantchi
OpenTofu Release Candidate Is Out, GA Set for Jan 10th

OpenTofu v1.6.0-rc1,第一个稳定版本发布前的最后阶段,今天已经推出。它紧随其后的是其 alphabeta 版本,预计将于 2024 年 1 月 10 日,在假期结束后,正式发布。

此版本包括错误修复、稳定性改进和文档更新。重要的是,此版本突出了我们新的 公共注册表 的稳定性,该注册表在三周前的 v1.6.0-beta1 版本中首次推出,并已通过我们和 OpenTofu 社区的早期采用者进行了广泛的测试。

从想法到发布候选版本仅需 4 个月

OpenTofu 的旅程风风火火,从一个提议到发布候选版本只用了 4 个月。

这对我们来说是一个重要的里程碑,但也令人苦乐参半。回顾我们旅程的开始,我们曾希望 HashiCorp 能听到我们的呼吁,改变其决定,恢复生态系统的平衡。

然而,我们现在……在最初几周的惊讶、希望和失望之后发生的每一件事,只能被描述为协作的案例研究。同行、社区和竞争对手都团结起来,共同努力,以维护基础设施即代码的开源选择。

回顾一下,到目前为止的主要里程碑是

An animated graphic visualizing the history of OpenTofu. August 10, 2023: Terraform shifts to Business Source License. August 15: OpenTF manifesto goes live. August 25: OpenTF is announced. August 31: Manifesto surges to 30k GitHub stars. September 5: OpenTF repo goes public. September 20: OpenTF joins the Linux Foundation as OpenTofu. October 4: Alpha released. November 29: Beta released. December 20: Stable release candidate. January 10, 2024: General availability.

截至 12 月 18 日,OpenTofu 的下载量已超过 31,000 次,拥有 60 位贡献者,并已收到 1,000 多个拉取请求和问题。该项目的仓库在 GitHub 上的星标数已超过 16,450 个,另外 宣言 的 GitHub 星标数也超过了 36,200 个。

现在,让我们言归正传。

注册表挑战

宣布 OpenTF 分支 的那一刻起,就显而易见,需要一个新的公共注册表——一个 Terraform 注册表的开源替代品,在 TOS 更改 之后,该注册表不再对非 Terraform 项目开放。

与它的前身在功能上类似,这个新的注册表必须是一个高度可用的包解析服务,用于 OpenTofu 使用的所有提供者和模块。此外,它还必须满足其他特定标准,包括

  • 注册表必须尽可能自给自足,并且需要尽可能少的维护。
  • 为了应对不断增长的需求,它需要为高可用性而构建,并在规模上表现出色。
  • 它应该从 HashiCorp 的注册表平滑过渡,遵循“直接替换”的方法。
  • 无论我们选择什么,它都必须是开源的。

共同酿造

Homebrew 是 macOS 上事实上的标准包管理器——就像 APKRPM 对 Linux 而言,或者 Chocolatey/Winget 对 Windows 而言。它简单易用,核心是开源包数据库,而且打包应用程序的效率很高,这些特点激发了我们想要打造类似的东西,它将非常适合我们的需求,而它的流行程度也证明了它的可扩展性。

当我们讨论这个问题时,Homebrew 的负责人 Mike McQuaid 注意到了我们的谈话,并加入了进来,就仓库结构贡献了有益的见解,他从事这个项目已经有 14 年多了。

A screenshot of Mike McQuaid’s comments, contributing to the discussion about using Homebrew as a model for OpenTofu’s public registry.

对我来说,这段经历突出了开源理念的重要性,并提醒我,如果没有其固有的协作性,这样的参与将会少之又少。

这种本能的、不受约束的同志情谊是开源的精髓所在。

实施

除了其他建议之外,Mike 建议我们对仓库进行碎片化,以提高性能。

“我们最近进行了‘分片’处理,这样我们的最大仓库中的公式/桶就会被分成子目录……‘git’ 的性能在这种格式下有了显着提升。”

在此基础上,我们构建了注册表(https://registry.opentofu.org),它是一个按命名空间分类的字母排序子目录集合。这些目录已使用来自 GitHub 上所有当前可用提供程序和模块的信息进行填充,每个目录都有自己的 JSON 文件,其中包含元数据和其他详细信息。

重要的是,使用静态文件并将它们托管在 Cloudflare R2 公共存储桶中,也让我们能够充分利用其 CDN 功能,确保性能和高可用性,缓存命中率超过 94%(在此,对 CloudFlare 赞助此项目表示衷心感谢!)。

A screenshot of the Cloudflare dashboard showing 30-day numbers: 7.21k unique visitors, 518k total requests, 92.13% cached, 15 GB total data served and 14 GB data cached.

除了我们自己的测试之外,四个最常请求的文件是

  • /.well-known/terraform.json
  • /v1/providers/hashicorp/null/versions
  • /v1/providers/hashicorp/template/versions
  • /v1/providers/hashicorp/aws/versions

随着注册表上线,我们设置了 GitHub Action 来扫描索引资源的更新。我们还引入了 IssueOps 流程 来添加新的提供程序。有了它,新提交将自动处理和自动验证,当它们进入注册表时,Issues 将提供上下文和透明度。

A screenshot of the form allowing the addition of a new provider to the OpenTofu registry. The form fields are the provider name and DCO checkbox.

我们目前正在探索用于包和文档浏览的专用 UI。

下一站:1 月 10 日

随着节假日的到来,我们决定首先推出一个发布候选版本,并将 GA 计划于 1 月 10 日发布。同时,您可以通过简单地按照 此处提供的说明 开始测试 OpenTofu。它是 Terraform 的直接替代品,因此 Terraform 用户会感到宾至如归,这也是我们的最终目的。

如果您有兴趣为该项目做出贡献,请查看这些 贡献指南,不要忘记加入我们的 Slack 社区

节日快乐!

附注

在完成本文以及即将发布的版本的工作时,我们获悉 HashiCorp 的传奇联合创始人 Mitchell Hashimoto 宣布将离开该公司,结束了他在该公司 11 年的旅程。

Mitchell 在 Vagrant、Consul、Vault 以及当然还有 Terraform 等项目上的工作,是我们以及开源社区中许多人的灵感来源。

整个 OpenTofu 团队对 Mitchell 的众多贡献表示衷心的感谢,同时我们也热切期待着了解他接下来将在已经非凡的旅程中迈出的下一步。