未找到 terraform kubectl 提供程序

Posted

技术标签:

【中文标题】未找到 terraform kubectl 提供程序【英文标题】:terraform kubectl provider not found 【发布时间】: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 的输出是什么? 【参考方案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"
    
  


【讨论】:

以上是关于未找到 terraform kubectl 提供程序的主要内容,如果未能解决你的问题,请参考以下文章

在具有私有 GKE 集群的 Terraform 上使用 Kubernetes 提供程序

terraform - 在您的集群中未找到任何容器实例

Terraform 和 AWS:未找到配置文件错误

Terraform 0.15.1 多提供者问题 - 参数“region”是必需的,但未设置

Terraform - 在可用时使用 rds 快照

使用 Terraform 创建具有托管标识的 Azure AKS 会导致 AutoUpgradePreview 未启用错误