Почему Terraform не видит моего установленного вручную провайдера?

Я пытаюсь установить поставщик RKE как часть краткое руководство Rancher AWS< /а>. В документации Terraform говорится, что плагины следует устанавливать в ~/.terraform.d/plugins. В документации RKE сказано, что плагин должен быть установлен по адресу ~/terraform.d/plugins/<your_platform>.

Пытаясь согласовать противоречивую информацию, я попытался скопировать двоичный файл во все следующие места, но Terraform так и не увидел ни одного из них:

~/.terraform.d/plugins/terraform-provider-rke
~/.terraform.d/plugins/rke
~/.terraform.d/plugins/darwin_amd64/terraform-provider-rke
~/.terraform.d/plugins/darwin_amd64/rke
~/terraform.d/plugins/terraform-provider-rke
~/terraform.d/plugins/rke
~/terraform.d/plugins/darwin_amd64/terraform-provider-rke
~/terraform.d/plugins/darwin_amd64/rke

В каждом случае, когда я запускал terraform init, я получал следующую ошибку:

Provider "rke" not available for installation.

A provider named "rke" could not be found in the Terraform Registry.

This may result from mistyping the provider name, or the given provider may
be a third-party provider that cannot be installed automatically.

In the latter case, the plugin must be installed manually by locating and
downloading a suitable distribution package and placing the plugin's executable
file in the following directory:
    terraform.d/plugins/darwin_amd64

Terraform detects necessary plugins by inspecting the configuration and state.
To view the provider versions requested by each module, run
"terraform providers".


Error: no provider exists with the given name

В крайнем случае я мог бы использовать terraform init -plugin-dir=<something>. Но тогда Terraform не видит ни одного из автоматически загружаемых плагинов, и мне приходится все устанавливать вручную.

Есть ли какая-то переменная пути, которая отсутствует, или какое-то другое соглашение об именах, которому я не следую?


person David Bruce Borenstein    schedule 04.05.2020    source источник
comment
попробуйте создать провайдера: github.com/rancher/terraform-provider-rke #создание-поставщика   -  person Helder Sepulveda    schedule 05.05.2020
comment
Почему это изменит результат?   -  person David Bruce Borenstein    schedule 05.05.2020
comment
Вы строите его сами, если в вашей среде есть какие-либо проблемы, это может отображаться таким образом.   -  person Helder Sepulveda    schedule 05.05.2020
comment
Я построил его сам, и это не решило проблему, но это помогло мне сузить круг, что позволило мне разобраться (см. мой ответ). Благодарю вас!   -  person David Bruce Borenstein    schedule 05.05.2020


Ответы (2)


Оказывается, сообщение об ошибке не рассказало всей истории. Terraform нашла провайдера, но не думала, что это достаточно новая версия.

Согласно документации Terraform, провайдер должен быть назван как terraform-provider-<NAME>_vX.Y.Z. В документации поставщика RKE говорится, что файл должен называться terraform-provider-rke (без номера версии).

В комментарии к исходному коду Terraform для обнаружения подключаемых модулей, там написано, что этот безверсионный формат поддерживается для обратной совместимости. Однако Terraform интерпретирует версию как v0.0.0.

Когда я запустил terraform plan после неудачного terraform init, я получил более информативное сообщение об ошибке:

Error: provider.rke: no suitable version installed
  version requirements: "0.14.1"
  versions installed: "0.0.0"

Эта версия, по-видимому, является требованием другого поставщика, который зависит от поставщика RKE.

Я вернулся и вручную загрузил именно эту версию из репозитория Github и скопировал ее в каталог плагинов с именем terraform-provider-rke_v0.14.1. Это сработало!

Так вот. Если сомневаетесь, посмотрите исходный код. Теперь нужно отправить отчет о проблеме Rancher, попросив их обновить свою документацию. :-)

person David Bruce Borenstein    schedule 05.05.2020

Для пользователей Windows на корпоративном брандмауэре, где не разрешена прямая загрузка zip-файла поставщика.

  1. Просто загрузите ZIP-файл провайдера, перейдя по соответствующему URL-адресу.

  • Теперь в корневом каталоге - файл main.tf, который содержит раздел провайдеров.
  1. Создайте структуру папок, например registry.terraform.io\hashicorp\aws\3.37.0\windows_amd64, и поместите извлеченный exe-файл из zip-архива в это место.
  2. Перейдите в командную строку и выполните:

terraform init -plugin-dir .


Структура каталога:

  • main.tf
  • реестр.terraform.io\hashicorp\aws\3.37.0\windows_amd64\terraform_provider_aws_v3.37.0_x5.exe

aws_v3.37.0_x5.exe Фрагмент структуры каталога

person rkdove96    schedule 20.04.2021