地形变量中的地图内的地图

Isa*_*acD 8 variables terraform terraform-provider-aws

有谁知道是否有可能用代码片段来表示我是否可以在 terraform 变量的地图变量中创建地图变量?

variable "var" {
  type = map
  default = {
    firstchoice = {
      firstAChoice ="foo"
      firstBChoice = "bar"
    }
    secondchoice = {
      secondAChoice = "foobar"
      secondBChoice = "barfoo"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果有人对这是否可行或任何详细说明的文档有任何见解,那就太好了。

Avi*_*aya 14

是的,可以将地图变量作为地图变量键的值。您的变量只需要正确的缩进。此外,我正在考虑访问该变量的方法。

variable "var" {
  default = {
    firstchoice = {
      firstAChoice = "foo"
      firstBChoice = "bar"
    }

    secondchoice = {
      secondAChoice = "foobar"
      secondBChoice = "barfoo"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

要访问地图键的整个地图值firstchoice,您可以尝试以下操作

value = "${var.var["firstchoice"]}"

output:
{
  firstAChoice = foo
  firstBChoice = bar
}
Run Code Online (Sandbox Code Playgroud)

要访问该映射键的特定键(示例firstAChoice),您可以尝试

value = "${lookup(var.var["firstchoice"],"firstAChoice")}"

output: foo
Run Code Online (Sandbox Code Playgroud)


Ami*_*dav 5

这种语法可能吗?${var.var[firstchoice[firstAchoice]]}

Terraform 0.12+ 嵌套块被无缝支持。扩展@Avichal Badaya 的回答以使用示例进行解释:

# Nested Variable

variable "test" {
  default = {
    firstchoice = {
      firstAChoice = "foo"
      firstBChoice = "bar"
    }

    secondchoice = {
      secondAChoice = "foobar"
      secondBChoice = "barfoo"
    }

    thirdchoice = {
      thirdAChoice = {
          thirdBChoice = {
              thirdKey = "thirdValue"
        }
      }
    }
  }
}


# Outputs

output "firstchoice" {
  value = var.test["firstchoice"]
}

output "FirstAChoice" {
  value = var.test["firstchoice"]["firstAChoice"]
}

output "thirdKey" {
  value = var.test["thirdchoice"]["thirdAChoice"]["thirdBChoice"]["thirdKey"]
}

Run Code Online (Sandbox Code Playgroud)

应用上述内容,您可以验证 Terraform 地图嵌套现在非常强大,这使很多事情变得更容易。

# Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

# Outputs:

firstchoice = {
  "firstAChoice" = "foo"
  "firstBChoice" = "bar"
}

thirdKey = thirdValue 
Run Code Online (Sandbox Code Playgroud)

有关更复杂的结构和丰富的值类型,请参阅HashiCorp Terraform 0.12 预览版:丰富的值类型

  • 我喜欢这个更新的答案。它使代码更具可读性。是否可以使用点表示法遍历地图?例如:`var.test.firstchoice.firstAchoice`? (2认同)