Terraform - ссылка на значение экземпляра при вызове модуля, выдающего ошибки - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть блок кода ниже, который создает группу подсетей на основе списка имен и списка address_prefixes.

resource "azurerm_subnet" "subnet" {
  count                     = "${length(var.subnet_names)}"
  name                      = "${element(var.subnet_names, count.index)}"
  resource_group_name       = "${var.vnet_rg_name}"
  virtual_network_name      = "${data.azurerm_virtual_network.vnet.name}"
  address_prefix            = "${element(var.subnet_prefixes, count.index)}"
  service_endpoints         = ["Microsoft.Sql","Microsoft.Storage","Microsoft.AzureCosmosDB"]
  network_security_group_id = "${data.azurerm_network_security_group.required_nsg.id}"
  route_table_id            = "${element(azurerm_route_table.routetable.*.id, count.index)}"
  depends_on                = ["azurerm_route_table.routetable"]
}

Затем я пытаюсь создать некоторые маршруты с использованием модуля, но когдаЯ пытаюсь передать значения для переменных, используя свойства из конкретного экземпляра ресурса azurerm_subnet.subnet , он выдает ошибку:

"module.insidedmzroutes.var.subnet_name:Ресурс 'azurerm_subnet.subnet' не найден для переменной 'azurerm_subnet.subnet.5.name' "

module "insidedmzroutes" {
  source           = "./modules/dmzroutes"
  subnet_name      = "${azurerm_subnet.subnet.5.name}"
  vnet_rg          = "${data.azurerm_resource_group.vnet_rg.name}"
  route_table_name = "${azurerm_route_table.routetable.5.name}"
  next_hop_ip      = "${cidrhost(azurerm_subnet.subnet.5.address_prefix, 4)}"
  subnet_names     = ["${var.subnet_names}"]
  subnet_prefixes  = ["${var.subnet_prefixes}"]
}

Это не работает или у меня неверно составлена ​​ссылка?

1 Ответ

0 голосов
/ 13 декабря 2018

Пожалуйста, ознакомьтесь с Синтаксической документацией Terraform , ищите interpolation syntax.

Будет работать следующее (как указано Adil B ):

subnet_name = "${azurerm_subnet.subnet.*.name[5]}" Как и в случае с синтаксисом splat *, вы выбираете все элементы, созданные с помощью переменной count, который затем вернет список, который вы можете выбрать правильный элемент из [5].

Однако, почему вы также передаете весь список подсетей?Какие это подсети?Из вашего кода не очень понятно, являются ли эти 5 подсетей, которые вы создали ранее, или разными.Вы создаете insidedmzroutes для каждой подсети?Если это так, я бы избавился от subnet_name var и вместо этого реализовал нечто подобное в ресурсе внутри модуля:

count = "${length(var.subnet_names)}"
subnet_name = "${element(var.subnet_names, count.index)}"
...