Я только начинаю осваивать Terraform (поэтому извиняюсь, если это глупый вопрос).
Я настраиваю Azure vnet с набором подсетей, каждая подсеть имеет таблицу маршрутизации, котораяотправляет трафик через брандмауэр.
Похоже, что комбинация подсети и таблицы маршрутов создаст хороший повторно используемый модуль.
По договоренности я бы хотел создать подсеть и таблицу маршрутов в одной группе ресурсов.и location как родительский vnet.
Если я предоставлю все значения, необходимые в модуле, как отдельные значения, модуль будет работать нормально:)
Я бы предпочел эффективно передать ресурскоторый представляет родительский vnet в модуль как «параметр», и модуль читает такие вещи, как имя группы ресурсов, расположение и имя vnet непосредственно из ресурса vnet, так что: - Я печатаю меньше (я создаю экземпляр модуля с помощьюvnet, а не отдельные значения для имени vnet, имени группы ресурсов и местоположения) - это устраняет возможность ошибки при установке местоположения и имен групп ресурсов в таблице маршрутизации и подсети (если я читаю значения из родительского vnet вмодуль, то значения будут такими же, как родительский vnet)
В настоящее время мпеременные модуля определены как
variable "parent-vnet-name" {}
variable "parent-vnet-resource-group-name" {}
variable "parent-vnet-location" {}
variable "subnet-name" {
type = "string"
}
variable "subnet-address-prefix" {}
variable "firewall-ip-private" {}
, а модуль - как
resource "azurerm_route_table" "rg-mgt-network__testtesttest" {
name = "${var.subnet-name}"
location = "${var.parent-vnet-location}"
resource_group_name = "${var.parent-vnet-resource-group-name}"
route {
name = "Default"
address_prefix = "0.0.0.0/0"
next_hop_type = "VirtualAppliance"
next_hop_in_ip_address = "${var.firewall-ip-private}"
}
}
На самом деле то, что я хотел бы сделать, больше похоже на переменные:
variable "parent-vnet" {}
variable "subnet-name" {
type = "string"
}
variable "subnet-address-prefix" {}
variable "firewall-ip-private" {}
с модулем, выполняющим что-то вроде:
resource "azurerm_route_table" "rg-mgt-network__testtesttest" {
name = "${var.subnet-name}"
location = "${var.parent-vnet.location}"
resource_group_name = "${var.parent-vnet.resource-group-name}"
route {
name = "Default"
address_prefix = "0.0.0.0/0"
next_hop_type = "VirtualAppliance"
next_hop_in_ip_address = "${var.firewall-ip-private}"
}
}
Я поиграл с различными вещами (например, попытка передать vnet без указания имени атрибута (ошибка проверки) или использование источника данных для извлеченияобратно в vnet (источники данных не имеют информации о группе ресурсов)), но нигде нет, поэтому мне интересно, что я что-то пропустил?
Приветствия, Энди