Terraform-地图变量不能定义为输入变量

Terraform-地图变量不能定义为输入变量,terraform,Terraform,我一直在一个文件(main.tf)中编写一些地形代码。现在,它正在按预期工作,我想为它构建一个模块 我想把这个硬编码变量变成一个输入变量。所以我复制/粘贴到modules variables.tf文件中 variable "subnet-map" { type = map default = { aznum = 0, bits = 8, netnum = 0, desc = "some description" }, {

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

我想把这个硬编码变量变成一个输入变量。所以我复制/粘贴到modules variables.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中定义时会有不同的处理方式。有什么想法吗?

你错过了第一个{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希望它与=,位于同一行。在我的所有迭代过程中,似乎我在这里犯了一个复制粘贴错误,对不起。最后我让它像这样工作: