Облачная рабочая область Terraform - Ошибка при установке hashicorp/kubectl: реестр провайдеров

Я пытаюсь добавить поставщика terraform для работы с ним из пары рабочих пространств из облака terraform. я использую Terraform v0.13.6

Таким образом, я определил его в качестве необходимого поставщика, определив в качестве источника:

      terraform {
  required_version = ">= 0.13.6"
  required_providers {
    kubectl = {
      source  = "gavinbunney/kubectl"
      version = "~> 1.10.0"
    }
  }
}

provider "kubectl" {
  load_config_file       = "false"
  host                   = data.terraform_remote_state.tfc.outputs.kube_config.0.host
  client_certificate     = base64decode(data.terraform_remote_state.tfc.outputs.kube_config.0.client_certificate)
  client_key             = base64decode(data.terraform_remote_state.tfc.outputs.kube_config.0.client_key)
  cluster_ca_certificate = base64decode(data.terraform_remote_state.tfc.outputs.kube_config.0.cluster_ca_certificate)
}

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

      > terraform_0.13.6 init
Initializing modules...
....

Initializing the backend...

Initializing provider plugins...
- terraform.io/builtin/terraform is built in to Terraform

############# 
# HERE NOT SURE WHY TERRAFORM INSISTS TO LOOK FOR kubectl PROVIDER 
# AT hashicorp/kubectl SOURCE BY DEFAULT
- Finding latest version of hashicorp/kubectl...
############# 

# HERE I CAN SEE gavinbunney/kubectl PROVIDER WAS INSTALLED
- Finding gavinbunney/kubectl versions matching "~> 1.10.0"...
- Installing gavinbunney/kubectl v1.10.0...
- Installed gavinbunney/kubectl v1.10.0 (self-signed, key ID AD64217B5ADD572F)

Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/plugins/signing.html

# BUT I GOT THIS ERROR 

Error: Failed to install provider

Error while installing hashicorp/kubectl: provider registry
registry.terraform.io does not have a provider named
registry.terraform.io/hashicorp/kubectl

Почему terraform пытается вытащить провайдера из hashicorp/kubectl источник, когда я определил как источник?

Смотрю в свой локальный каталог .terraform/plugins/registry.terraform.io Я действительно вижу, что у меня установлены следующие поставщики источников:

      ~/w/my-project/terraform/kubernetes/.terraform/plugins/registry.terraform.io  on 
> ls -all
total 0
drwxr-xr-x  3 bgarcial  staff   96 Feb 26 10:13 carlpett
drwxr-xr-x  3 bgarcial  staff   96 Feb 26 10:13 gavinbunney
drwxr-xr-x  9 bgarcial  staff  288 Feb 26 10:13 hashicorp

Если я пойду в hashicorp каталог действительно, я вижу, что провайдера нет:

      ~/w/my-project/terraform/kubernetes/.terraform/plugins/registry.terraform.io/hashicorp  
> ls
azuread    azurerm    helm      kubernetes null       random     template

Конечно, именно по этой причине для моей ошибки, даже будучи странным, я объявил источник как, который действительно существует в моем .terraform/plugins/registry.terraform.io/gavinbunney каталог

      my-project/terraform/kubernetes/.terraform/plugins/registry.terraform.io/gavinbunney  
> ls
kubectl

Увидев это, я скопировал из моего существующего в исходный terraform. 0.13 выглядит попытаться по умолчанию искать поставщика, это означает registry.terraform.io/hashicorp

      cp -R .terraform/plugins/registry.terraform.io/gavinbunney/kubectl .terraform/plugins/registry.terraform.io/hashicorp

Когда я бегу terraform init снова это успешно

      > terraform init
Initializing modules...

Initializing the backend...

Initializing provider plugins...

- Using previously-installed hashicorp/kubernetes v2.0.2

# I DON'T UNDERSTAND WHY IT SAYS THIS SINCE THE PLUGIN WAS NOT FOUND
# BEFORE IN THAT SOURCE
- Using previously-installed hashicorp/kubectl v1.10.0
#####

# HERE I AM STILL USING gavinbunney/kubectl SOURCE
# IS THAT ONE I WANT TO USE
- Using previously-installed gavinbunney/kubectl v1.10.0

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, we recommend adding version constraints in a required_providers block
in your configuration, with the constraint strings suggested below.

# IT LOOKS LIKE ITS SET IT UP OFFICIALLY HASHICORP AS A SOURCE
* hashicorp/kubectl: version = "~> 1.10.0"

Terraform has been successfully initialized!
...

Когда я выполняю terraform init в моем облачном рабочем пространстве terraform, происходит нечто подобное, я вижу kubectl поставщик плагинов устанавливается из gavinbunney/kubectl (тот, который я определил для использования в моей конфигурации terraform):

      Terraform v0.13.6
Configuring remote state backend...
Initializing Terraform configuration...

Setup failed: Failed terraform init (exit 1): <nil>

Output:
[0m[1mInitializing modules...[0m
.....
[0m[1mInitializing the backend...[0m
[0m[32m
Successfully configured the backend "remote"! Terraform will automatically
use this backend unless the backend configuration changes.[0m

[0m[1mInitializing provider plugins...[0m
- terraform.io/builtin/terraform is built in to Terraform

############# 
# TERRAFORM IS LOOKING FOR hashicorp/kubectl SOURCE
- Finding latest version of hashicorp/kubectl...
#############

# TERRAFORM IS INSTALLING IT FROM gavinbunney/kubectl SOURCE
- Installing gavinbunney/kubectl v1.10.0...
- Installed gavinbunney/kubectl v1.10.0 (self-signed, key ID [0m[1mAD64217B5ADD572F[0m[0m)
########



Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/plugins/signing.html

# BUT THEN TERRAFORM IS ALSO TRYING TO INSTALL IT 
# FROM hashicorp/kubectl SOURCE

[1m[31mError: [0m[0m[1mFailed to install provider[0m

[0mError while installing hashicorp/kubectl: provider registry
registry.terraform.io does not have a provider named
registry.terraform.io/hashicorp/kubectl
[0m[0m

Читая дальше, я нашел такой ответ :

Terraform v0.13 представила идею сторонних поставщиков, которые принадлежат к другим пространствам имен, которые не контролируются напрямую HashiCorp, но для максимальной обратной совместимости с модулями, которые были написаны для Terraform v0.12 и ранее, существует резервное поведение, когда Terraform будет Предположим, что любое явно не заявленное требование к поставщику нацелено на использование одного из официальных поставщиков, которые теперь находятся в пространстве имен hashicorp в реестре, поскольку для Terraform v0.12 и более ранних сторонние поставщики вообще не могли автоматически устанавливаться.

При написании модулей для Terraform v0.13 или новее вы должны включить явные требования к поставщику, чтобы указать полные адреса источника для каждого из поставщиков, используемых вашим модулем.

Почему, если я явно использую требования поставщика, мне пришлось скопировать локально в моей локальной инициализации terraform, чтобы она работала, и, кроме того, облако terraform не может идентифицировать источник, для которого я заявляю gavinbunney/kubectl v1.10.0.?

ПРИМЕЧАНИЕ:

Не уверен, что мне придется проверять альтернативу Implied Local mirrors, описанную там

0 ответов

Другие вопросы по тегам