微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用变量在 Terraform 中配置和创建新 Github 存储库实例而不是就地更新的最佳实践

如何解决使用变量在 Terraform 中配置和创建新 Github 存储库实例而不是就地更新的最佳实践

我正在尝试为我的组织设置一个标准的 Github 存储库模板,该模板使用 terraform 使用配置的设置启动新存储库。

每次我尝试更新配置文件以使用新名称创建存储库的新实例时,它都会尝试就地更新已使用该文件创建的任何存储库。

我的问题是使我的配置文件可与存储库名称等输入变量重用的最佳实践是什么?我应该制作一个模块还是有其他方法可以重用该文件

感谢您的帮助。

解决方法

Terraform 是一个期望状态配置系统,这意味着您的配置应该代表应该存在的完整对象集,而不是创建单个对象的指令。

因此,添加新存储库的典型方法是添加一个新的 resource 块来声明该新存储库,保持现有存储库不变。然后,Terraform 将看到状态中当前未跟踪的新资源,并建议创建它。

如果您的存储库以某种系统的方式配置,您可以使用机械规则而不是手动配置来描述,那么您可以潜在地使用 the for_each meta-argument 从同一资源块声明多个资源实例,使用 Terraform 语言表达式来描述系统规则。

例如,您可以使用更高级别的数据结构创建一个本地值,该数据结构描述了您的存储库之间应该有什么不同,然后在单个 for_each 块上使用该数据结构和 resource

locals {
  repositories = tomap({
    example_1 = {
      description = "First example repository"
    }
    example_2 = {
      description = "Second example repository"
    }
  })
}

resource "github_repository" "all" {
  for_each = local.repositories

  name        = each.key
  description = each.value.description
  private     = true
}

在这个例子中,为了简单起见,我只在实例之间创建了名称和描述变量,但是您可以为 local.repositories 的每个元素添加您需要的任何额外属性,然后通过 {{1 }} 在 each.value 块内。

上面的 resource 参数说明了这种方法如何避免需要重新声明对于每个声明的存储库都相同的参数值,并使您的 private 数据结构只关注最小的描述围绕 GitHub 存储库的本地策略所需的变体所需的属性。

设置了 local.repositoriesresource 块在其他地方的表达式中使用时显示为对象映射,使用与 for_each 中给出的映射中相同的键。因此,如果您需要访问存储库 ID 或系统声明的对象的任何其他属性,您可以编写使用地图的 Terraform 表达式。例如,如果要将所有存储库 ID 输出为字符串映射:

for_each

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。