Значение этого сообщения об ошибке заключается в том, что Terraform полагался на блок provider "kubernetes"
внутри модуля k8s-cassandra
для настройки поставщика AWS.Удалив модуль из исходного кода, вы неявно удалили эту конфигурацию, и поэтому существующие объекты, уже присутствующие в состоянии, не могут быть удалены - конфигурация поставщика, необходимая для этого, отсутствует.
Хотя Terraform позволяетprovider
блокирует внутри дочерних модулей для гибкости, документация рекомендует хранить их все в корневом модуле и передавать конфигурации провайдера по имени в дочерние модули с использованием карты providers
или путем автоматического наследования по имени.
provider "kubernetes" {
# global kubernetes provider config
}
module "k8s-cassandra" {
# ...module arguments...
# provider "kubernetes" is automatically inherited by default, but you
# can also set it explicitly:
providers = {
"kubernetes" = "kubernetes"
}
}
Чтобы выйти из конфликтной ситуации, которая у вас уже есть, ответ состоит в том, чтобы временно восстановить блок module "k8s-cassandra"
, а затем уничтожить объекты, которыми он управляет , прежде чем удалить его, используя -target
option:
terraform destroy -target module.k8s-cassandra
После того, как все объекты, управляемые этим модулем, были уничтожены и удалены из состояния, вы можете безопасно удалить блок module "k8s-cassandra"
из конфигурации.
Toчтобы это не повторилось, переделайтеЗдесь и дочерние модули, так что все конфигурации провайдера находятся в корневом модуле, а дочерние модули наследуют только конфигурации провайдера, переданные из корня.Для получения дополнительной информации см. Провайдеры внутри модулей в документации.