Terraform прикрепляет NI C для исправления su bnet id в Azure - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть модуль, который создает vNet с 5 подсетями. Модуль записывает идентификатор каждой su bnet в переменную, используя блок:

output "vnet_subnets" {
  description = "The ids of subnets created inside the newly created vNet"
  value       = azurerm_subnet.subnet.*.id
}

, а затем выводит его в файл состояния, используя блок:

output "vnet_subnets" {
  value = module.virtual_network.vnet_subnets
}

. файл состояния, вывод выглядит следующим образом:

"vnet_subnets": {
      "value": [
        "/subscriptions/<my_sub_id>/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/GatewaySubnet",
        "/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/VDMS",
        "/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/external",
        "/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/internal",
        "/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/management"
      ],
      "type": [
        "tuple",
        [
          "string",
          "string",
          "string",
          "string",
          "string"
        ]
      ]
    }

У меня есть развертывание виртуальной машины, которое я хочу использовать файл состояния vnet в качестве источника данных, чтобы я мог назначить виртуальную машину для правильного су bnet. У меня вопрос, как мне найти правильный su bnet в выходном наборе vnet_subnets?

1 Ответ

1 голос
/ 27 апреля 2020

В соответствии с вашими требованиями, я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что вы не можете найти специальный выход, который вы хотите использовать по выходам.

Возможные средства, которые вы могли бы использовать, как я думаю, - поместить идентификаторы su bnet в карту с именами su bnet. И тогда вы можете использовать специальный su bnet с именем и получить его с карты. Вот пример кода, который вы можете посмотреть:

variable "subnets" {
    type = list(string)
    default = [
        "test1",
        "test2",
        "test3"
    ]
}

variable "subnet_prefix" {
    type = list(string)
    default = [
        "10.0.1.0/24",
        "10.0.2.0/24",
        "10.0.3.0/24"
    ]
}


resource "azurerm_virtual_network" "example" {
  name                = "acceptanceTestVirtualNetwork1"
  address_space       = ["10.0.0.0/16"]
  location            = "East US"
  resource_group_name = "group_name"
}

resource "azurerm_subnet" "example" {
    count                                = length(var.subnets)
  name                 = element(var.subnets, count.index)
  resource_group_name  = "group_name"
  virtual_network_name = azurerm_virtual_network.example.name
  address_prefix       = element(var.subnet_prefix, count.index)
}

output "subnets_map" {
    value = zipmap(var.subnets, azurerm_subnet.example.*.id)
}

Я вижу, вы используете модули, поэтому вы можете поместить вывод модуля vnet в качестве ввода для модулей VM.

...