我有重复的代码 - 有没有办法 extend/reuse terraform 模块?
I have duplicate code - is there a way to extend/reuse terraform modules?
我已经复制并粘贴了大块的 terraform,这通常是我缺少一些可以整理东西的语言功能的标志(对 tf 来说相对较新)。
示例:
module "my_module"
{
source = "../something"
some_var = "a value"
another_var = "another value"
wow_more_var = "wow"
a_module_specific_var = "1"
}
module "another_module"
{
source = "../something"
some_var = "a value"
another_var = "another value"
wow_more_var = "wow"
a_module_specific_var = "2"
}
如您所见 - 这些模块声明的唯一不同之处在于 a_module_specific_var
(最后)。我在这里缺少哪种语言功能可以让我抽象出公共部分?如果这是在我常用的 Node 中,我会把它拉到一个 JS 函数中,然后将 1
或 2
作为参数传递。
您可以将 count
或 for_each
与模块一起使用,已记录 here。我会创建一个包含那些模块特定变量的列表,然后使用 for_each
,像这样:
module "my_module"
{
for_each = toset( ["1", "2"] )
source = "../something"
some_var = "a value"
another_var = "another value"
wow_more_var = "wow"
a_module_specific_var = each.key
}
我已经复制并粘贴了大块的 terraform,这通常是我缺少一些可以整理东西的语言功能的标志(对 tf 来说相对较新)。
示例:
module "my_module"
{
source = "../something"
some_var = "a value"
another_var = "another value"
wow_more_var = "wow"
a_module_specific_var = "1"
}
module "another_module"
{
source = "../something"
some_var = "a value"
another_var = "another value"
wow_more_var = "wow"
a_module_specific_var = "2"
}
如您所见 - 这些模块声明的唯一不同之处在于 a_module_specific_var
(最后)。我在这里缺少哪种语言功能可以让我抽象出公共部分?如果这是在我常用的 Node 中,我会把它拉到一个 JS 函数中,然后将 1
或 2
作为参数传递。
您可以将 count
或 for_each
与模块一起使用,已记录 here。我会创建一个包含那些模块特定变量的列表,然后使用 for_each
,像这样:
module "my_module"
{
for_each = toset( ["1", "2"] )
source = "../something"
some_var = "a value"
another_var = "another value"
wow_more_var = "wow"
a_module_specific_var = each.key
}