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),文件名不符合规则会导致识别失败。
修复操作
调整文件存放路径
创建正确的路径:/home/lukerb/.terraform.d/plugins/registry.terraform.io/mastercard/restapi/1.20.0/linux_amd64/,将解压后的可执行文件移动到该路径下。修正
.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"] } }修正main.tf中的provider源
terraform { required_providers { restapi = { source = "mastercard/restapi" version = "1.20.0" } } }检查并重命名可执行文件
确保路径下的文件名为terraform-provider-restapi_1.20.0_linux_amd64,不符合则修改文件名。重新执行初始化
运行terraform init,此时Terraform应该能正确识别本地的provider。
内容的提问来源于stack exchange,提问作者Elarbe
相关产品推荐
相关产品推荐

