Обновление заблокированных зависимостей в соответствии с измененной конфигурацией

Я прохожу курс Введение в Terraform на Azure и на главе 4 я могу легко Создать группу ресурсов в Terraform с помощью этого кода:

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "3.51.0"
    }
  }
}

provider "azurerm" {
 features{}
}

resource "azurerm_resource_group" "main"{
  name = "learn-tf-rg-switzerlandnorth"
  location = "switzerlandnorth"
} 

Потом я иду спать.

На следующий день смотрю видео Создание виртуальной сети и добавляю в свой код несколько строчек:

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "3.51.0"
    }
  }
}

provider "azurerm" {
 features{}
}

resource "azurerm_resource_group" "main"{
  name = "learn-tf-rg-switzerlandnorth"
  location = "switzerlandnorth"
} 

# Create a virtual network
resource "azure_virtual_network" "main"{
  name = "learn-tf-vnet-switzerlandnorth"
  locatoin = azurerm_resource_group.main.location
  resource_group_name = azurerm_resource_group.main.name
  address_space = ["10.0.0.0/16"]
}

Теперь, если я попытаюсь запустить terraform plan, я получу:

│ Error: Inconsistent dependency lock file
│
│ The following dependency selections recorded in the lock file are inconsistent with the current configuration:
│   - provider registry.terraform.io/hashicorp/azure: required by this configuration but no version is selected
│
│ To update the locked dependency selections to match a changed configuration, run:
│   terraform init -upgrade

Итак, я запускаю terraform init -upgrade и получаю:

│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider hashicorp/azure: provider registry registry.terraform.io does not have a provider named registry.terraform.io/hashicorp/azure      
│
│ Did you intend to use terraform-providers/azure? If so, you must specify that source address in each module which requires that provider. To see which modules are currently depending on
│ hashicorp/azure, run the following command:
│     terraform providers

Итак, я запускаю terraform providers и получаю:

Провайдеры, требуемые конфигурацией:

.
├── provider[registry.terraform.io/hashicorp/azurerm] 3.51.0
└── provider[registry.terraform.io/hashicorp/azure]

Providers required by state:

    provider[registry.terraform.io/hashicorp/azurerm]

Я новичок в Терраформе.

В чем проблема?

Я думаю, что azure_virtual_network должно быть azurerm_virtual_network - вы непреднамеренно создали зависимость от несуществующего провайдера azure с помощью azure_virtual_network, и это конфликтует с файлом блокировки, который предназначен для защиты вас от непреднамеренных изменений провайдера (терраформ использует имя типа ресурса как руководство по тому, какой провайдер определяет его — см. developer.hashicorp.com/terraform/language/resources/syntax, в котором говорится: «По соглашению имена типов ресурсов начинаются с предпочтительного локального имени их провайдера»)

mclayton 10.04.2023 07:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я проверил с проблемой:

Инициализированный код без каких-либо заблокированных ресурсов, что успешно. Добавлены строки кода, которые вы добавили для проверки .

resource "azure_virtual_network" "main"{
  name = "learn-tf-vnet-switzerlandnorth"
  locatoin = data.azurerm_resource_group.main.location
  resource_group_name = data.azurerm_resource_group.main.name
  address_space = ["10.0.0.0/16"]
}

Полученная ошибка:

Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider hashicorp/azure: provider registry registry.terraform.io does not have a provider named
│ registry.terraform.io/hashicorp/azure
│
│ Did you intend to use terraform-providers/azure? If so, you must specify that source address in each module which requires that provider. To see which modules are       
│ currently depending on hashicorp/azure, run the following command:
│     terraform providers

Это произошло из-за отсутствия блока ресурсов в реестре terraform в провайдере azurerem с resource "azure_virtual_network" .

Правильный вариант resource "azurerm_virtual_network" .

При исправлении это могло быть успешно инициализировано.

Успешно создан Vnet после terraform apply:

На портале Azure: создается виртуальная сеть:

Ссылка: azurerm_virtual_network | Ресурсы | хашикорп/азурерм | Реестр Terraform

Другие вопросы по теме