terraform init使用vsphere provider报错:无法查询vmsphere提供者包
问题解决方案
根因定位
报错核心是Terraform尝试拉取不存在的hashicorp/vmsphere provider,对比正确的官方provider名vsphere可以发现,错误名称多了一个字母m。从terraform providers的输出可以确认,这个错误的provider依赖来自你引用的module.exa_v30_01(也就是路径为../modules/vm的子模块)。
修复步骤
- 打开子模块路径
../modules/vm下的所有.tf后缀配置文件,查找所有提到vmsphere的内容:- 优先检查子模块的
required_providers块,确认是否把provider名称写错成了vmsphere,直接修正为vsphere即可 - 其次检查子模块里的所有资源定义,是否有前缀写为
vmsphere_的资源(比如错误的vmsphere_virtual_machine),修正为vsphere_前缀即可
- 优先检查子模块的
- 修复完成后回到根配置目录,执行以下命令清理旧的依赖缓存再重新初始化:
rm -rf .terraform .terraform.lock.hcl terraform init
临时兼容方案
如果引用的是第三方子模块无法直接修改代码,可以在根配置的required_providers块中添加别名映射,强制把错误的vmsphere指向正确的vsphere provider,示例配置如下:
terraform { required_providers { vsphere = { source = "hashicorp/vsphere" version = ">= 2.0.0" } vmsphere = { source = "hashicorp/vsphere" version = ">= 2.0.0" } } }
该方案不需要修改第三方子模块代码,即可解决名称写错的依赖问题。
内容的提问来源于stack exchange,提问作者Chris F
相关产品推荐
相关产品推荐

