【问题标题】:How can I reference the map variable in the terraform? <Azure>如何在 terraform 中引用地图变量? <蔚蓝>
【发布时间】:2021-03-04 19:48:19
【问题描述】:

ma​​in.tf 写道:

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = ">= 2.26"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "rg" {
  name     = "Product-RG"
  location = var.location
}

resource "azurerm_virtual_network" "vnet" {
  resource_group_name = azurerm_resource_group.rg.name
  name          = "Product-VNet"
  address_space = [lookup(var.vnetAddress, var.location)]
  location      = var.location

  subnet {
    name           = "Web-Sub1"
    address_prefix = ["${lookup(var.subnetAddress[var.location], "web1")}"]
  }
  subnet {
    name           = "Web-Sub2"
    address_prefix = [lookup(var.subnetAddress[var.location], "web2")]
  }

在 Web-Sub1 中,我最初是像 Web-Sub2 一样带上 address_prefix,但现在我在错误发生后尝试在 Web-Sub1 上使用 address_prefix。

发生了如下错误。

错误:属性值类型不正确

在 main.tf 第 27 行,资源“azurerm_virtual_network”“vnet”中: 27: address_prefix = ["${lookup(var.subnetAddress[var.location], "web1")}"]

属性“address_prefix”的值不合适:需要字符串。

错误:属性值类型不正确

在 main.tf 第 31 行,资源“azurerm_virtual_network”“vnet”中: 31: address_prefix = [lookup(var.subnetAddress[var.location], "web2")]

属性“address_prefix”的值不合适:需要字符串。

variable.tf 写道:

variable "location" {}

variable "vnetAddress" {
  type = map

  default = {
    westus = "192.168.1.0/27"
    eastus = "192.168.11.0/27"
  }
}

variable "subnetAddress" {
  type = map

  default = {
    westus = {
      web1 = "192.168.1.0/27"
      web2 = "192.168.1.32/27"
      was1 = "192.168.1.64/27"
      was2 = "192.168.1.96/27"
      db1 = "192.168.1.128/27"
      db2 = "192.168.1.160/27"
    }

    eastus = {
      web1 = "192.168.11.0/27"
      web2 = "192.168.11.32/27"
      was1 = "192.168.11.64/27"
      was2 = "192.168.11.96/27"
      db1 = "192.168.11.128/27"
      db2 = "192.168.11.160/27"
    }
  }
}

不知道为什么会有错误需要写成字符串格式,为什么不能带数据。

【问题讨论】:

    标签: terraform


    【解决方案1】:

    你快到了,只是 address_prefix 参数需要是一个字符串,并且你正在传递一个字符串列表 address_prefix = [lookup(var.subnetAddress[var.location], "web2")]

      subnet {
        name           = "Web-Sub1"
        address_prefix = lookup(var.subnetAddress[var.location], "web1")
      }
      subnet {
        name           = "Web-Sub2"
        address_prefix = lookup(var.subnetAddress[var.location], "web2")
      }
    

    这应该可行。

    参考azurerm_virtual_network 资源,address_prefix 作为字符串而不是字符串列表传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      相关资源
      最近更新 更多