【问题标题】:terraform kubectl provider not found未找到 terraform kubectl 提供程序
【发布时间】:2021-02-03 01:15:10
【问题描述】:

我正在尝试为 terraform 模块添加 kubectl 提供程序,并遵循来自 Terraform kubectl 的文档。我运行terraform init 并成功安装了提供程序,但是当我尝试添加示例配置时,例如:(或来自here 的其他人)

resource "kubectl_server_version" "current" {}

然后运行 ​​terraform plan 我得到以下消息:

Error: Could not load plugin
Failed to instantiate provider "registry.terraform.io/hashicorp/kubectl" to
obtain schema: unknown provider "registry.terraform.io/hashicorp/kubectl"

当我 tun terraform init(资源在模块 k8s 中到位)

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 plugins

├── provider[registry.terraform.io/hashicorp/kubernetes] 1.13.2
├── provider[registry.terraform.io/gavinbunney/kubectl] 1.9.1
├── module.k8s
│   ├── provider[registry.terraform.io/hashicorp/kubectl]
│   └── provider[registry.terraform.io/hashicorp/kubernetes]



$terraform init

Initializing modules...

Initializing the backend...

Initializing provider plugins...
- Using previously-installed hashicorp/kubernetes v1.13.2
- Using previously-installed gavinbunney/kubectl v1.9.1

$terraform -v

Terraform v0.13.4
  + provider registry.terraform.io/gavinbunney/kubectl v1.9.1
  + provider registry.terraform.io/hashicorp/kubernetes v1.13.2
  ....

一些配置文件:

terraform.tf

terraform {

  required_version  = "0.13.4"

  backend "gcs" {
    ...
  }

  required_providers {
    kubernetes = {
        source        = "hashicorp/kubernetes"
        version       = "1.13.2"
      }

    kubectl = {
      source          = "gavinbunney/kubectl"
      version         = "1.9.1"
    }
....

terraform 成功初始化 gavinbunney/kubectl 提供程序,但是当我在 k8s.module 中添加 resource "kubectl_manifest" ... 时,terraform 正在尝试加载 hashicorp/kubectl 提供程序

我错过了什么? :)

【问题讨论】:

  • 您说安装成功,但尝试安装时只显示错误。你认为安装成功后能显示输出吗?
  • terraform init 正在初始化模块...正在初始化后端...正在初始化提供程序插件... - 使用之前安装的 hashcorp/kubernetes v1.13.2 - 使用之前安装的 gavinbunney/kubectl v1.9.1
  • 您能否编辑您的问题以将terraform 块定义也包含在required_providers 中?
  • terraform 成功初始化了gavinbunney/kubectl,但是当我在 k8s.module 中添加 kubectl_manifest 资源时,terraform 正在尝试加载 hashicorp/kubectl 提供程序
  • 您使用的是什么版本的 terraform? terraform -v 的输出是什么?

标签: kubernetes terraform kubectl terraform-provider-gcp


【解决方案1】:

似乎问题在于我在同一模块中拥有resource "kubectl_server_version" "current" {} 以及来自hashicorp/kubernetes 资源的其他资源,而terraform 试图从hashicorp/kubectl 加载kubectl

当我在 main.tf 中添加 gavinbunney/kubectl 的资源时,一切都很好:)

【讨论】:

    【解决方案2】:

    当我阅读文件cat .terraform/plugins/selections.json 时,我明白这个包并没有很好地安装。

    在我的项目中,我做到了:

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

    之后:

    terraform init
    

    这样看问题就解决了。

    【讨论】:

      【解决方案3】:

      要解决此问题,您可以查看 terraform state replace-provider registry.terraform.io/hashicorp/kubectl gavinbunney/kubectl

      【讨论】:

        【解决方案4】:

        似乎如果你只留下 kubernetes 提供者,kubectl 提供者就可以正常工作。意味着,无需声明 kubernetes 和 kubectl 提供程序。

        【讨论】:

        • hmmm ...我没有那样尝试,我会尝试:)谢谢
        【解决方案5】:

        在我的情况下,这是由于在模块中引用了 kubectl 资源,但该模块需要提供者添加到模块内的required_providers

        terraform {
          required_providers {
            kubectl = {
              source  = "gavinbunney/kubectl"
              version = "x.x.x"
            }
          }
        }
        
        

        【讨论】:

          猜你喜欢
          • 2021-05-29
          • 2014-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-29
          • 2015-07-23
          • 1970-01-01
          • 2016-08-14
          相关资源
          最近更新 更多