Terraform - map变量不能定义为输入变量



我一直在一个文件(main.tf)中编写一些地形代码。现在,它是按预期工作,我想为它建立一个模块。

我想让这个硬编码变量成为一个输入变量。所以我复制/粘贴到模块变量。tf文件。

variable "subnet-map" {
type = map
default = {
aznum = 0, bits = 8, netnum = 0, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 1, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 2, desc = "some description" },
{ aznum = 0, bits = 8, netnum = 3, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 4, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 5, desc = "some description" },
{ aznum = 0, bits = 8, netnum = 6, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 7, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 8, desc = "some description" },
{ aznum = 0, bits = 8, netnum = 9, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 10, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 11, desc = "some description" },

}

确认一下,是的,它在单个'main '中没有任何问题。tf的文件。当我尝试将其作为输入变量时,我得到以下错误:

$ terraform apply
Error: Unexpected comma after argument
on modules/my-aws-subnet/variables.tf line 17, in variable "subnet-map":
16:   default = {
17:         aznum = 0, bits = 8, netnum = 0, desc = "some description" },
Argument definitions must be separated by newlines, not commas. An argument
definition must end with a newline.

我不知道为什么在variables.tf中定义时,这是不同的处理方式。任何想法吗?

这里的问题是您的默认变量值不是有效类型。它必须是String、Number、Bool、Map、Object、List等类型之一,或者是一些复杂的类型。如果您希望它是map,就像您在type中指定的那样,那么您可以向默认值添加一个键:

variable "subnet-map" {
type = map
default = { "my-map" =
{ aznum = 0, bits = 8, netnum = 0, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 1, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 2, desc = "some description" },
{ aznum = 0, bits = 8, netnum = 3, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 4, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 5, desc = "some description" },
{ aznum = 0, bits = 8, netnum = 6, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 7, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 8, desc = "some description" },
{ aznum = 0, bits = 8, netnum = 9, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 10, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 11, desc = "some description" },
}
}

或者,如果您想要一个映射列表,那么您也可以在更新的typedefault中指定:

variable "subnet-map" {
type = list(map)
default = [
{ aznum = 0, bits = 8, netnum = 0, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 1, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 2, desc = "some description" },
{ aznum = 0, bits = 8, netnum = 3, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 4, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 5, desc = "some description" },
{ aznum = 0, bits = 8, netnum = 6, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 7, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 8, desc = "some description" },
{ aznum = 0, bits = 8, netnum = 9, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 10, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 11, desc = "some description" },
]
}

这是我最后的解决方案。

variable "subnet-map" {
default = {
pub = [
{ aznum = 0, bits = 8, netnum = 0, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 1, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 2, desc = "some description" },
{ aznum = 0, bits = 8, netnum = 3, desc = "some description" },
{ aznum = 1, bits = 8, netnum = 4, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 5, desc = "some description" },
],
int = [
{ aznum = 0, bits = 8, netnum = 6, desc =  "some description" },
{ aznum = 1, bits = 8, netnum = 7, desc =  "some description" },
{ aznum = 2, bits = 8, netnum = 8, desc =  "some description" },
{ aznum = 0, bits = 8, netnum = 9, desc =  "some description" },
{ aznum = 1, bits = 8, netnum = 10, desc = "some description" },
{ aznum = 2, bits = 8, netnum = 11, desc = "some description" },
],
}
}

您缺少aznum = 0旁边的第一个{括号。

最新更新