Когда я пытаюсь инициализировать terraform, я получаю следующую ошибку только с модулем vnet, Но инициализация terraform работает с модулями azure_resource_group, azure_virtual_machine
Terraform 0.13 и более ранние версии допускали ограничения версии провайдера внутри блок конфигурации провайдера, но теперь он устарел и будет удален в будущей версии Terraform. Чтобы отключить это предупреждение, переместите поставщика ограничение версии в блок required_providers.
Ошибка: не удалось запросить доступные пакеты поставщиков.
Не удалось получить список доступных версий для провайдера. hashicorp/azure: реестр провайдеров Registration.terraform.io не имеет провайдер с именем register.terraform.io/hashicorp/azure
Если вы только что перешли напрямую с Terraform v0.12 на Terraform v0.14 затем сначала выполните обновление до Terraform v0.13 и следуйте инструкциям по обновлению для этот выпуск, который может помочь вам решить эту проблему.
Вы намеревались использовать terraform-providers/azure? Если это так, вы должны указать, что исходный адрес в каждом модуле, для которого требуется этот провайдер. Чтобы увидеть, какой модули в настоящее время зависят от hashicorp/azure,
введите здесь описание изображения
введите здесь описание изображения
main.tf
resource "azurerm_virtual_network" "vnet" {
for_each = { for n in var.networks : n.name => n }
name = each.value.name
address_space = each.value.address_space
location = each.value.location
resource_group_name = each.value.rg_name
dynamic "subnet" {
for_each = each.value.subnets
content {
name = subnet.value.name
address_prefix = subnet.value.address_prefixes
}
}
}
variables.tf
variable networks {
type = list(object({
name = string
address_space = list(string)
rg_name = string
location = string
subnets = list(object({
name = string
address_prefixes = string
}))
}))
}
module (main.tf)
module "azurevnet"{
source = "./vnet"
networks = var.networks
}
provider.tf
provider "azurerm" {
version = "=2.37.0"
}
Насколько я знаю, реестр terraform-providers/azure
является устаревшим провайдером. Эта модель больше не будет добавлять новые вещи, а Azure уже переходит на модель ARM. Поэтому я рекомендую вам использовать только модель terraform-providers/azurerm
, которая поддерживает больше функций Azure.
Обновлять:
И используйте модель azurerm
, структура каталогов будет выглядеть так:
main.tf
module "azurevnet" {
source = "./vnet"
networks = var.networks
}
провайдеры.tf
provider "azurerm" {
features {}
version = "=2.37.0"
}
vnet/main.tf
variable "networks" {}
resource "azurerm_virtual_network" "vnet" {
for_each = { for n in var.networks : n.name => n }
name = each.value.name
address_space = each.value.address_space
location = each.value.location
resource_group_name = each.value.rg_name
dynamic "subnet" {
for_each = each.value.subnets
content {
name = subnet.value.name
address_prefix = subnet.value.address_prefixes
}
}
}
Я даю код только для виртуальной сети, но другие ресурсы будут в том же формате. И вы также можете не использовать файл provider.tf и поместить содержимое в файл main.tf.
Я уже упоминал azurerm в provider.tf с версией. если вы видите мой код.
@BasavarajBiradar Я привожу пример для виртуальной сети.
не могли бы вы предоставить фрагмент кода для использования «terraform-providers/azurerm». где разместить этого провайдера? Как избежать использования terraform-providers/azurerm