Я пишу небольшую запись в блоге о миграции 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 state replace-provider
требуется инициализированный бэкенд, поэтому она не будет работать, если сначала не будет запущена terraform init
.
Каталог .terraform
содержит некоторое временное состояние рабочего каталога, которое Terraform обычно может воспроизвести при необходимости, но его удаление означает, что любые зависимости модулей, которые не имеют точных ограничений версии, потенциально могут выбрать другую версию при повторной установке, эта команда- Аргументы конфигурации серверной части, указанные в строке, будут потеряны, а выбранная в данный момент рабочая область будет сброшена до значений по умолчанию.
Поэтому я бы не предложил просто небрежно рекомендовать пользователям удалить этот каталог, если вы не можете объяснить возможные последствия этого.
.terraform.lock.hcl
— это файл блокировки зависимостей, и его следует рассматривать как часть конфигурации, хотя terraform init
автоматически обновляет его, поскольку его цель — запомнить между запусками, какая версия каждого провайдера была выбрана. После создания этот файл обычно должен храниться под контролем версий.
Наряду с сохранением записи о том, какая версия была выбрана для каждого провайдера, файл блокировки зависимостей также обеспечивает методологию «доверия при первом использовании» для провайдеров Terraform, сохраняя контрольные суммы провайдеров, чтобы, если вы предпримете какие-либо шаги для проверки провайдеров которые вы установили, заслуживают доверия, то вы можете быть уверены, что Terraform не допустит никаких пакетов с другой контрольной суммой, если вы специально не решите обновиться с помощью terraform init -upgrade
.
В этом случае удаление .terraform.lock.hcl
отключит этот механизм, удалив запись исходной контрольной суммы, а это означает, что не будет никакой гарантии, что terraform init
установит тот же пакет, что и раньше.
Нет, вы не должны просить их удалить все, что создано terraform. Фактически, файл блокировки зависимостей рекомендуется хранить в репозитории системы управления версиями, если вы его используете. Подробнее об этом можно прочитать здесь: terraform.io/язык/файлы/зависимость-блокировка