如何减少不同模块中的 locals.tf 文件之间的逻辑重复?

问题描述 投票:0回答:1

我有一个

locals.tf
,其中包含一堆查找映射,这些映射将 tf 变量转换为已知/预期值,并返回未知值的值(可能带有后缀),例如:

locals {
  Environment = lookup({
    prd = "Production"
    stg = "Staging"
    qa  = "QA"
  }, var.env, var.env)
  subdomain = lookup({
    prd = "www"
    stg = "stage"
    qa  = "test"
  }, var.env, "${var.env}.dev")
}

我已在每个模块中复制了此文件,因此我只需将

env
var 作为输入传递给模块,而不是传递所有其他计算值。

我想消除这种重复,将所有这些信息和行为保留在一个地方,这样我只需在一处更新它,但仍然可以让所有模块访问它。不幸的是,查找的动态性质以及默认值和后缀意味着直接查找类似

jsondecode(file("foo.json"))
的内容并不是一个足够的替代方案。还有哪些其他选择?

terraform code-duplication hcl opentofu
1个回答
0
投票

每个模块都可以包含指向

locals.tf
文件的单个规范实例的符号链接,例如:

/main.tf
/locals.tf (the real file)
/submodule1/main.tf
/submodule1/locals.tf -> ../locals.tf
/submodule2/main.tf
/submodule1/locals.tf -> ../locals.tf

这将彻底删除文件的重复数据。然而,如果在没有清理符号链接的情况下删除原始文件,它会留下悬空引用,并且在许多编辑器中,打开符号链接之一时,正在编辑不同位置的文件并不明显。与纯粹基于 HCL 的解决方案相比,该解决方案需要更多的操作系统/操作知识。

© www.soinside.com 2019 - 2024. All rights reserved.