Terraform-地图变量不能定义为输入变量
我一直在一个文件(main.tf)中编写一些地形代码。现在,它正在按预期工作,我想为它构建一个模块 我想把这个硬编码变量变成一个输入变量。所以我复制/粘贴到modules variables.tf文件中Terraform-地图变量不能定义为输入变量,terraform,Terraform,我一直在一个文件(main.tf)中编写一些地形代码。现在,它正在按预期工作,我想为它构建一个模块 我想把这个硬编码变量变成一个输入变量。所以我复制/粘贴到modules variables.tf文件中 variable "subnet-map" { type = map default = { aznum = 0, bits = 8, netnum = 0, desc = "some description" }, {
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中定义时会有不同的处理方式。有什么想法吗?你错过了第一个{aznum=0旁边的括号。这里的问题是您的默认变量值不是有效的类型。它必须是字符串、数字、布尔、映射、对象、列表等类型中的一种,或者是某个复杂类型。如果您希望它是
映射
中指定的,则可以为默认值添加一个键:
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" },
}
}
或者,如果需要地图列表,也可以在更新的类型
和默认值
中指定:
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" },
],
}
}
这部分实际上还可以。括号位于前一行default={
。我之所以这样做,是因为TF希望它与=,位于同一行。在我的所有迭代过程中,似乎我在这里犯了一个复制粘贴错误,对不起。最后我让它像这样工作: