You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform v1.11.3本地镜像安装restapi provider失败求助

问题:Terraform安装restapi provider失败

我想安装一款通用API provider(restapi),用来在Terraform中对接官方registry未收录的API,该provider由Mastercard维护。

已通过cURL下载最新版本压缩包,解压后执行chmod +x赋予可执行权限。按照Hashicorp文档要求,创建了~/.terraformrc配置文件采用显式安装方式,内容如下:

provider_installation {
  filesystem_mirror {
    path    = "/home/lukerb/.terraform.d/plugins/registry.terraform.io/hashicorp/restapi/1.20.0/linux_amd64/"
    include = ["registry.terraform.io/*/*"]
  }
  direct {
    exclude = ["registry.terraform.io/*/*"]
  }
}

该路径存在且存放了解压后的可执行文件,但在main.tf所在目录执行terraform init时,提示找不到provider。我的main.tf内容如下:

terraform {
  required_providers {
    restapi = {
      source = "hashicorp/restapi"
      version = "1.20.0"
    }
  }
}

启用verbose日志后,发现初始化时会检查该路径但无法识别内容。修改配置后仍报错,具体日志如下:

2025-04-08T15:33:07.564+0200 [INFO]  Terraform version: 1.11.3
...(省略部分日志)
│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider mastercard/restapi: provider
│ registry.terraform.io/mastercard/restapi was not found in any of the search locations
│
│   - /home/lukerb/.terraform.d/plugins/registry.terraform.io/Mastercard/restapi/1.20.0/linux_amd64

问题分析与修复步骤

核心错误点

  • Provider归属与路径不匹配:该provider的官方命名空间是mastercard,但你在main.tf和.terraformrc中都错误使用了hashicorp,和日志提示的mastercard/restapi完全不对应。Terraform对provider路径有严格规范:必须遵循registry.terraform.io/<命名空间>/<provider名>/<版本>/<系统架构>/的结构。
  • 可执行文件命名不规范:Terraform要求provider可执行文件必须命名为terraform-provider-<provider名>_<版本>_<系统架构>(例如terraform-provider-restapi_1.20.0_linux_amd64),文件名不符合规则会导致识别失败。

修复操作

  1. 调整文件存放路径
    创建正确的路径:/home/lukerb/.terraform.d/plugins/registry.terraform.io/mastercard/restapi/1.20.0/linux_amd64/,将解压后的可执行文件移动到该路径下。

  2. 修正.terraformrc配置

    provider_installation {
      filesystem_mirror {
        path    = "/home/lukerb/.terraform.d/plugins/registry.terraform.io/mastercard/restapi/1.20.0/linux_amd64/"
        include = ["registry.terraform.io/mastercard/restapi"]
      }
      direct {
        exclude = ["registry.terraform.io/mastercard/restapi"]
      }
    }
    
  3. 修正main.tf中的provider源

    terraform {
      required_providers {
        restapi = {
          source = "mastercard/restapi"
          version = "1.20.0"
        }
      }
    }
    
  4. 检查并重命名可执行文件
    确保路径下的文件名为terraform-provider-restapi_1.20.0_linux_amd64,不符合则修改文件名。

  5. 重新执行初始化
    运行terraform init,此时Terraform应该能正确识别本地的provider。

内容的提问来源于stack exchange,提问作者Elarbe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:42:11