Terraform配置疑问:联用镜像源与plugin_cache_dir缓存未生效
问题原因与解决方案
你的问题出在**plugin_cache_dir和provider_installation块的兼容性上**:当Terraform配置了provider_installation自定义安装规则时,单独的plugin_cache_dir配置会被完全忽略,Terraform只会遵循provider_installation内定义的源优先级逻辑,这就是缓存始终不生效的核心原因。
正确的配置方式
需要把缓存逻辑整合到provider_installation块内部,使用Terraform官方推荐的local_cache块实现缓存,同时调整源的顺序确保缓存优先。修改后的配置如下:
provider_installation { # 优先检查本地缓存 local_cache { directory = "/cache/.terraform.d/plugin-cache" } # 公司内部Provider优先使用文件系统镜像 filesystem_mirror { path = "/tmp/" include = ["mycompany.com/*/*"] } # 非内部Provider使用网络镜像 network_mirror { url = "https://my_s3_bucket/" exclude = ["mycompany.com/*/*"] } }
配置说明
local_cache的优先级:Terraform会按provider_installation内块的从上到下顺序查找Provider,把local_cache放在最前面,确保每次初始化先检查缓存目录。- 替代
plugin_cache_dir:删除原来单独的plugin_cache_dir配置,local_cache块已经完全覆盖了它的功能,并且能和其他镜像规则协同工作。 - 缓存逻辑生效:首次执行
terraform init时,会从对应镜像下载Provider并写入缓存;后续执行时,若缓存中存在对应版本的Provider则直接使用,不存在才回退到对应的镜像下载并更新缓存。
为什么之前的配置无效?
单独的plugin_cache_dir是Terraform旧版的全局缓存配置,当你定义了provider_installation块时,Terraform会切换到"自定义安装模式",此时全局缓存配置会被禁用,必须通过local_cache块将缓存逻辑整合到自定义安装规则中。
内容的提问来源于stack exchange,提问作者Nicolas Pepinster
相关产品推荐
相关产品推荐

