Terraform - рефакторинг модулей: ошибка: отсутствует конфигурация провайдера - PullRequest
0 голосов
/ 15 октября 2019

Я выполняю рефакторинг некоторых модулей Terraform и получаю:

Error: Provider configuration not present

To work with
module.my_module.some_resource.resource_name its
original provider configuration at
module.my_module.provider.some_provider.provider_name is required, but it
has been removed. This occurs when a provider configuration is removed while
objects created by that provider still exist in the state. Re-add the provider
configuration to destroy
module.my_module.some_resource.resource_name, after
which you can remove the provider configuration again.

Кажется, мне нужно удалить этот ресурс из файла tfstate, а затем повторно добавить его с новой конфигурацией tf.

Поскольку я выполняю рефакторинг некоторого монолитного кода, существуют сотни этих Error: Provider configuration not present сообщений.

Есть ли ярлык для удаления и повторного добавления?

1 Ответ

1 голос
/ 16 октября 2019

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

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

Если вы намерены уничтожить экземпляров ресурса в module.my_module, то вы должны сделать это перед удалением блока module "my_module" из корневого модуля. Это одна необычная ситуация, когда мы можем использовать -target, чтобы помочь Terraform понять, что мы хотим, чтобы он делал:

terraform destroy -target=module.my_module

После того, как все эти объекты будут уничтожены, вы сможете удалить module "my_module" блокировать, не видя ошибку «Конфигурация провайдера отсутствует», поскольку в состоянии, не зависящем от конфигурации этого провайдера, не будет ни одного экземпляра ресурса.

Если ваша цель - переместить блоки ресурса в другой модуль, возможен другойздесь разрешается использовать terraform mv, чтобы поручить Terraform отслеживать существующий объект по новому адресу:

terraform mv 'module.my_module.some_resource.resource_name' 'module.other_module.some_resource.resource_name'

Опять же, лучше сделать это до удаления старого модуля, поэтомучто старая конфигурация провайдера остается в наличии до тех пор, пока ей не останется ничего для управления. После того, как вы переместили существующий объект в новый модуль в состоянии и у вас есть блок resource для него в конфигурации, Terraform должен понимать ваше намерение управлять этим ресурсом с помощью другой конфигурации провайдера, и вы можетебезопасно удалите старый блок module и, таким образом, блок provider внутри него.

...