首页 > 解决方案 > 如何使用用户提供的变量访问嵌套地图中的元素?

问题描述

我试图找出根据输入变量从映射变量中查找多个值的最佳方法。在这种情况下,输入将是 vSphere 交换机端口组的名称。

例如,给定以下信息:

variable "networks" {
    type    = map
    default = {
        "port-group-mail.internal" = {
            network = "10.0.10.0"
            netmask = "24"
            gateway = "10.0.10.1"
        }
        "port-group-web.dmz" = {
            network = "10.0.50.32"
            netmask = "27"
            gateway = "10.0.50.33"
        }
    }
}

用法:

module "myvm" {
  vm_name = "web-01"
  network = "port-group-web.dmz"
}

我希望能够根据network我模块中的变量查找“网络”、“网络掩码”、“网关”。

标签: terraform

解决方案


考虑以下变量(这基本上是您的network模块变量):

variable "my_network" {
    type    = string
    default = "port-group-web.dmz"
}

现在,如果我这样做,var.networks[<my variabl>]我可以访问地图:

$ terraform console
> var.my_network
"port-group-web.dmz"
> var.networks[var.my_network]
{
  "gateway" = "10.0.50.33"
  "netmask" = "27"
  "network" = "10.0.50.32"
}

推荐阅读