Должен ли я удалить файл блокировки terraform перед запуском terraform init

Я пишу небольшую запись в блоге о миграции TF Provider, которая включает следующие команды:

terraform state replace-provider foo/bar foo2/bar2

# Updating TF configuration file

terraform init

Должен ли я сказать пользователям, чтобы они запускали

rm -rf .terraform/                          
rm .terraform.lock.hcl

перед бегом

terraform init

Нет, вы не должны просить их удалить все, что создано terraform. Фактически, файл блокировки зависимостей рекомендуется хранить в репозитории системы управления версиями, если вы его используете. Подробнее об этом можно прочитать здесь: terraform.io/язык/файлы/зависимость-блокировка

Ervin Szilagyi 03.05.2022 18:22
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Для команды terraform state replace-provider требуется инициализированный бэкенд, поэтому она не будет работать, если сначала не будет запущена terraform init.

Каталог .terraform содержит некоторое временное состояние рабочего каталога, которое Terraform обычно может воспроизвести при необходимости, но его удаление означает, что любые зависимости модулей, которые не имеют точных ограничений версии, потенциально могут выбрать другую версию при повторной установке, эта команда- Аргументы конфигурации серверной части, указанные в строке, будут потеряны, а выбранная в данный момент рабочая область будет сброшена до значений по умолчанию.

Поэтому я бы не предложил просто небрежно рекомендовать пользователям удалить этот каталог, если вы не можете объяснить возможные последствия этого.


.terraform.lock.hcl — это файл блокировки зависимостей, и его следует рассматривать как часть конфигурации, хотя terraform init автоматически обновляет его, поскольку его цель — запомнить между запусками, какая версия каждого провайдера была выбрана. После создания этот файл обычно должен храниться под контролем версий.

Наряду с сохранением записи о том, какая версия была выбрана для каждого провайдера, файл блокировки зависимостей также обеспечивает методологию «доверия при первом использовании» для провайдеров Terraform, сохраняя контрольные суммы провайдеров, чтобы, если вы предпримете какие-либо шаги для проверки провайдеров которые вы установили, заслуживают доверия, то вы можете быть уверены, что Terraform не допустит никаких пакетов с другой контрольной суммой, если вы специально не решите обновиться с помощью terraform init -upgrade.

В этом случае удаление .terraform.lock.hcl отключит этот механизм, удалив запись исходной контрольной суммы, а это означает, что не будет никакой гарантии, что terraform init установит тот же пакет, что и раньше.

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