【问题标题】:Terraform - map variable cannot be defined as an input variableTerraform - 地图变量不能定义为输入变量
【发布时间】:2021-06-11 00:09:45
【问题描述】:

我一直在处理单个文件 (main.tf) 中的一些 terraform 代码。现在它按预期工作了,我想为它构建一个模块。

我想让这个硬编码变量成为输入变量。所以我复制/粘贴到模块 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 中定义时会以不同方式对待它。有什么想法吗?

【问题讨论】:

  • 在我所有的迭代中,似乎我在这里复制粘贴错误,抱歉。最后我让它像这样工作:

标签: terraform


【解决方案1】:

这里的问题是您的默认变量值不是有效类型。它必须是 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" },
  ]
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这部分其实还可以。括号在上一行default = {。我这样做只是因为 TF 希望它与 = 位于同一行。
    【解决方案3】:

    这是我结束的解决方案。

    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" },
        ],
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-09
      • 2021-07-22
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 2020-07-10
      • 2021-01-14
      • 2020-09-05
      • 1970-01-01
      相关资源
      最近更新 更多