如果我创建这样一个可变的定义:
variable "aws_ecs_config" {
type = object({
cpu = number
memory = number
ecs_image_address = string
})
logs = {
type = object({
group = string
region = string
stream_prefix = string
})
}
}
如何在没有复制粘贴的情况下在多个地方重用该定义?
发布于 2019-11-08 22:14:38
不可能在Terraform中重用变量声明。如果不同模块中的变量具有相同的类型,则必须在每个模块中重复该类型。
Terraform有一个结构式系统而不是标称式系统,所以类型本身不命名,而是由它们的形式匹配/约束。当在模块之间传递值时,我们可以使用类型约束在一系列相关模块之间创建约定,但是没有在一个地方定义类型(或声明变量)并在其他地方重用它的机制。
Terraform的类型约束机制认为至少在类型约束中具有属性的任何对象都是有效的,因此不必每次都定义详尽的对象类型。
例如,如果使用以下类型定义变量:
object({
name = string
})
对于该类型约束,以下对象值是可以接受的,因为它具有正确类型的name
属性,而不管它定义的其他属性如何:
{
name = "foo"
other = "bar"
}
因此,最好将每个模块中的变量声明限制为特定模块实际需要的属性子集,这减少了模块之间的耦合:它们只需要兼容到它们的属性名称重叠的程度,而不需要直接绑定到另一个模块。
发布于 2022-09-14 00:02:41
解决办法
如果没有明确的Terraform支持,这是可能的。(有一些关于类型的讨论。称重 (如果你认为它会方便的话)
Terraform允许在多个文件上声明变量,如果模块位于Linux文件系统上,重用就大大简化了。(窗户的人.好吧,它是可能,只是不是漂亮,可能无法很好地处理版本控制。)
多么?
variable.aws_ecs_config.tf
的文件中variables
的目录,它位于modules
旁边。ln -s <path/to/variables>/variable.aws_ecs_config.tf
https://stackoverflow.com/questions/58772935
复制相似问题