帮助我们测试 OpenTofu 1.9.0-alpha2

文摘   2024-11-18 06:48   中国香港  

大家好!我们最近承担了 OpenTofu 自创立以来最具挑战性的任务,同时也有一段时间没有推出功能版本。今天,我们非常自豪地请求大家帮助测试 OpenTofu 1.9.0-alpha2。这次版本带来了备受期待的功能:使用 for_each 进行提供者迭代。此外,此版本还新增了计划和应用的 -exclude 标志。

我们已尽力确保新的 alpha 版本不会破坏任何功能,但仍需大家的帮助来进行测试。如果你有非生产环境,可以尝试新功能,请务必测试并通过 GitHub 问题[1]反馈给我们,即使只是告诉我们一切都很好。

这篇博客将介绍如何下载新预览版,并详细说明各项新功能的工作原理。

警告

请勿在生产项目上测试此版本!这不是稳定版本!

下载 alpha 版本

alpha 版本仅在 GitHub Releases 页面[2]提供。请根据你的平台选择合适的文件。以下是一些快速链接:

Platform/DeviceDownload link
Desktop Windows computer
(64-bit)
tofu_1.9.0-alpha2_windows_amd64.zip[3]
MacOS
(Macbook M1 or higher; ARM64)
tofu_1.9.0-alpha2_darwin_arm64.tar.gz[4]
MacOS
(Macbook pre-M1; AMD64)
tofu_1.9.0-alpha2_darwin_amd64.tar.gz[5]
Intel/AMD Linux computer or server
(AMD64)
tofu_1.9.0-alpha2_linux_amd64.tar.gz[6]
ARM-based Linux computer
or
Raspberry Pi 3 or higher

(ARM64)
tofu_1.9.0-alpha2_linux_arm64.tar.gz[7]

对于上述版本,请解压缩文件,你应该能找到 tofu 二进制文件。你也可以使用独立安装程序[8]下载带有签名验证的版本。

提供者 for_each

假设你需要使用云提供商在多个区域部署基础设施。为了减少代码重复,你创建了一个可以在每个区域使用的模块。然而,你的主模块仍然看起来像这样:

provider "aws" {
  alias  = "useast"
  region = "us-east-1"
}

provider "aws" {
  alias  = "uswest"
  region = "us-west-1"
}

provider "aws" {
  alias  = "eucentral"
  region = "eu-central-1"
}

module "deploy-useast" {
  source    = "./deploy"
  providers = {
    aws = aws.useast
  }
}

module "deploy-uswest" {
  source    = "./deploy"
  providers = {
    aws = aws.uswest
  }
}

module "deploy-eucentral" {
  source    = "./deploy"
  providers = {
    aws = aws.eucentral
  }
}

从 OpenTofu 1.9 开始,你可以使用 for_each 进行替代:

variable "regions" {
  description = "A list of regions that should have a deployment."
  type        = set(string)
}

variable "disabled_regions" {
  description = "A list of regions that should be disabled and all resources removed."
  type        = set(string)
  default     = []
}

provider "aws" {
  alias    = "by_region"
  region   = each.value
  for_each = var.regions
}

module "deploy" {
  source    = "./deploy"
  providers = {
    aws = aws.by_region[each.key]
  }
  // Here we make sure that all resources from a region are removed
  // if the region is disabled. This must be done before removing
  // a region entirely.
  for_each = setsubtract(var.regions, var.disabled_regions)
}

如你所见,你可以使用变量传入区域集,然后根据需要调用模块。

不过,使用 for_each 时有一些重要事项需要注意:

  1. 你只能在静态获取的变量和本地变量上使用 for_each。依赖数据源或资源的表达式目前不可用。
  2. 如果你已有基础设施已部署,请勿直接从列表中移除提供者,因为这会导致 OpenTofu 无法销毁该区域的基础设施。你需要先移除该基础设施,再从列表中移除提供者。请参考上面的 disabled_regions 变量示例。
  3. 目前,每个在 for_each 中使用的提供者必须有别名。由于内部技术原因,不支持没有别名的提供者。
  4. 目前无法将一组提供者传递给模块,只能传递单个提供者。

我们正在积极解决这些限制,未来的 OpenTofu 版本将改善这一能力。

在计划和应用中排除

这个标志虽然小,但功能强大:类似于 -target,你现在可以告诉 OpenTofu 在应用配置时忽略某个特定资源。

例如:

tofu plan -exclude=kubernetes_manifest.crds

在这种情况下,OpenTofu 会在计划时忽略 kubernetes_manifest.crds。

提供反馈

感谢你花时间测试这个预览版本。如果你有任何反馈,请通过 GitHub 问题反馈或在 OpenTofu Slack[9] 与我们交流。

参考资料
[1]

GitHub 问题: https://github.com/opentofu/opentofu/issues/new/choose

[2]

GitHub Releases 页面: https://github.com/opentofu/opentofu/releases/tag/v1.9.0-alpha2

[3]

tofu_1.9.0-alpha2_windows_amd64.zip: https://github.com/opentofu/opentofu/releases/download/v1.9.0-alpha2/tofu_1.9.0-alpha2_windows_amd64.zip

[4]

tofu_1.9.0-alpha2_darwin_arm64.tar.gz: https://github.com/opentofu/opentofu/releases/download/v1.9.0-alpha2/tofu_1.9.0-alpha2_darwin_arm64.tar.gz

[5]

tofu_1.9.0-alpha2_darwin_amd64.tar.gz: https://github.com/opentofu/opentofu/releases/download/v1.9.0-alpha2/tofu_1.9.0-alpha2_darwin_amd64.tar.gz

[6]

tofu_1.9.0-alpha2_linux_amd64.tar.gz: https://github.com/opentofu/opentofu/releases/download/v1.9.0-alpha2/tofu_1.9.0-alpha2_linux_amd64.tar.gz

[7]

tofu_1.9.0-alpha2_linux_arm64.tar.gz: https://github.com/opentofu/opentofu/releases/download/v1.9.0-alpha2/tofu_1.9.0-alpha2_linux_arm64.tar.gz

[8]

独立安装程序: https://opentofu.org/docs/intro/install/standalone/

[9]

Slack: https://opentofu.org/slack/


点击【阅读原文】阅读网站原文。


文章转载自LFAPAC点击这里阅读原文了解更多

CNCF概况(幻灯片)

扫描二维码联系我们!




CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux  Foundation,是非营利性组织。 

CNCF云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请关注CNCF微信公众号。

CNCF
云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。
 最新文章