Понимание Postgres provider / terraform registry — обновление версии 0,13

#postgresql #terraform #terraform-provider-aws #terraform0.12

#postgresql #terraform #terraform-provider-aws #terraform0.12

Вопрос:

Я не понимаю, как правильно указать поставщика postgres для версии 0.33.4 terraform.

Примечание: первоначально этот документ поставщика был в порядке для версии 12, чтобы заставить все работать: https://www.terraform.io/docs/providers/postgresql/index.html

и на версии 0.12 при запуске terraform providers я получу что-то похожее на это:

 .
├── provider.aws
└── <some module>
    ├── provider.aws
    ├── provider.postgresql
    ├── provider.template
    ├── provider.terraform
  

Я также могу проверить корзину плагина и посмотреть, какая версия плагина была загружена, и ее хэш.
С версией 0.13.x теперь нам нужно указать поставщиков с новой схемой.
Глядя здесь, я вижу 2 сообщества поставщиков postgresql.. что меня смущает в том, как одно было указано поверх другого изначально.
https://registry.terraform.io/browse/providers?category=database

Похоже, я использовал этого провайдера?: https://registry.terraform.io/providers/cyrilgdn/postgresql/latest

Когда я запускаю terraform init (после —reconfigure) на версии 0.33.4, мое сообщение об ошибке содержит:

 Initializing provider plugins...
- terraform.io/builtin/terraform is built in to Terraform
- Using previously-installed hashicorp/template v2.2.0
- Using previously-installed hashicorp/aws v3.11.0
- Using previously-installed terraform-providers/postgresql v1.7.1
- Finding latest version of hashicorp/postgresql...

Error: Failed to install providers

Could not find required providers, but found possible alternatives:

  hashicorp/postgresql -> terraform-providers/postgresql

If these suggestions look correct, upgrade your configuration with the
following command:

The following remote modules must also be upgraded for Terraform 0.13
compatibility:
- module.<some value> at
git::git@git<some value>
  

Вопросы:

Как он определяет одного поставщика сообщества postgres поверх другого? (по крайней мере, изначально)

Почему он пытается ссылаться на hashicorp / posgresql.

Почему он говорит мне использовать terraform-providers/postgresql вместо чего-то вроде поставщика исходного cyrilgdn/terraform-provider-postgresql кода?

Последний вопрос, даже после добавления:

 terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
    }
    postgresql = {
      source  = "terraform-providers/postgresql"
    }
  }

  required_version = ">= 0.13"
}
  

terraform providers вывод

 ├── provider[registry.terraform.io/hashicorp/aws]
└── <some module.repo>
    ├── provider[registry.terraform.io/hashicorp/aws]
    ├── provider[registry.terraform.io/terraform-providers/postgresql]
    ├── provider[registry.terraform.io/hashicorp/postgresql]
    ├── provider[terraform.io/builtin/terraform]
    ├── provider[registry.terraform.io/hashicorp/template]
  

Он добавляет нового поставщика, но не удаляет, казалось бы, ненужный hashicorp / postgresql, что по-прежнему приводит к тому же сообщению об ошибке. Может кто-нибудь объяснить, как правильно использовать это предложение?

Любая помощь приветствуется 🙂

Ответ №1:

Я полагаю, что моя проблема была связана с кешированной .terraform папкой в репозитории и какой-то странной внутренней проблемой. в конечном итоге terraform 0.13upgrade did действительно добавил правильную требуемую информацию о поставщике в version.tf .. если вы похожи на меня и все еще получаете ошибки, попробуйте выполнить terraform state list удаление ресурсов postgres delete .terraform / git clean, а затем запустите terraform init / plan / apply / etc . Сработало для меня.