Не удается создать одноранговую виртуальную сеть в Azure с помощью Terraform

#azure #terraform #azure-virtual-network

Вопрос:

я просматриваю список виртуальной сети в azure и через счетчик пытаюсь свериться с индексом[0], чтобы сохранить всю виртуальную сеть в списке. Не уверен, как поставить логику для виртуальной сети rest, что счетчик должен начинаться с индекса[1] вместо [0]. Упоминая index.count , он, наконец, пытается подключиться к той же виртуальной сети и выдает ошибку.

Вот мой код.

 Variable.tf
===========
variable "rg" {
 type= list(string)
 description = " Name of Resource Group"
 default = ["hub", "ansible", "spoke1", "spoke2", "spoke3", "spoke4", "spoke5"]
  }
#------------------------------:Vnet's:--------------------------------------------

variable "vnet_name" {
    description = "Vnet Details "
    type = list(string)
    default =  ["hub_vnet", "ansible_vnet", "spoke1_vnet", "spoke2_vnet", "spoke3_vnet", "spoke4_vnet", "spoke5_vnet"]
}

Main.tf
========
resource "azurerm_virtual_network_peering" "az_to_rest" {
  name                      = element(var.vnet_name, count.index)
  resource_group_name       = azurerm_resource_group.az_rg[0].name
  virtual_network_name      = azurerm_virtual_network.az_vnet[0].name
 remote_virtual_network_id = azurerm_virtual_network.az_vnet[count.index].id
  count                     = length(var.vnet_name)
}
 

Комментарии:

1. здравствуйте @виджай , могу я узнать, не была ли ваша проблема решена?

Ответ №1:

Я протестировал его для 3 виртуальных сетей в 3 группах ресурсов, используя приведенный ниже код:

 variable "rg" {
 type= list(string)
 description = " Name of Resource Group"
 default = ["testgroup","hubtest","ansibletest"]
  }
#------------------------------:Vnet's:--------------------------------------------

variable "vnet_name" {
    description = "Vnet Details "
    type = list(string)
    default =  ["ansuman_vnet","hub_vnet","ansible_vnet"]
}

provider "azurerm" {
  features {}
}

data "azurerm_resource_group" "test" {
  count = length(var.rg)
  name = element(var.rg,count.index)
}

data "azurerm_virtual_network" "vnet" {
  count               = length(var.rg)
  name                = element(var.vnet_name, count.index)
  resource_group_name = element(data.azurerm_resource_group.test.*.name, count.index)
}


resource "azurerm_virtual_network_peering" "az_to_rest" {
  name                      = element(var.vnet_name, count.index)
  resource_group_name       = "${data.azurerm_resource_group.test.0.name}"
  virtual_network_name      = "${data.azurerm_virtual_network.vnet.0.name}"
 remote_virtual_network_id = data.azurerm_virtual_network.vnet[count.index].id
  count                     = length(var.vnet_name)
}
 

выход:

введите описание изображения здесь

введите описание изображения здесь

Как вы можете видеть из приведенного выше изображения, он ошибается, так как также пытается свериться с самим собой.

Итак , в качестве решения я жестко закодировал имя виртуальной сети и группу ресурсов, которые я хочу использовать в других виртуальных сетях, и удалил их из списка, как показано ниже:

 variable "rg" {
 type= list(string)
 description = " Name of Resource Group"
 default = ["hubtest","ansibletest"]
  }
#------------------------------:Vnet's:--------------------------------------------

variable "vnet_name" {
    description = "Vnet Details "
    type = list(string)
    default =  ["hub_vnet","ansible_vnet"]
}

provider "azurerm" {
  features {}
}

data "azurerm_resource_group" "test" {
  count = length(var.rg)
  name = element(var.rg,count.index)
}

data "azurerm_virtual_network" "vnet" {
  count               = length(var.rg)
  name                = element(var.vnet_name, count.index)
  resource_group_name = element(data.azurerm_resource_group.test.*.name, count.index)
}


resource "azurerm_virtual_network_peering" "az_to_rest" {
  name                      = element(var.vnet_name, count.index)
  resource_group_name       = "testgroup" # resource group of vnet1
  virtual_network_name      = "ansuman_vnet"#vnet1
 remote_virtual_network_id = data.azurerm_virtual_network.vnet[count.index].id
  count                     = length(var.vnet_name)
}
 

Выход:

введите описание изображения здесь

введите описание изображения здесь