Как я могу ссылаться на переменную map в terraform?

#terraform

#terraform

Вопрос:

main.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 я изначально ввел address_prefix, как в Web-Sub2, но теперь я пытаюсь использовать address_prefix в Web-Sub1 после возникновения ошибки.

Произошла ошибка, как показано ниже.

Ошибка: неверный тип значения атрибута

на 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 = [поиск (var.subnetAddress[var.location], «web2»)]

Неподходящее значение для атрибута «address_prefix»: требуется строка.

переменная.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"
    }
  }
}
 

Интересно, почему возникает ошибка, которую необходимо записать в строковом формате, и почему я не могу привести данные.

Ответ №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")
  }
 

Это должно сработать.

Ссылка на ресурс address_prefix azurerm_virtual_network передается в виде строки, а не списка строк.