首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Terraform -错误加载模块-没有这样的文件或目录(文件夹重命名后)

Terraform -错误加载模块-没有这样的文件或目录(文件夹重命名后)
EN

Stack Overflow用户
提问于 2019-11-14 12:08:46
回答 1查看 6.6K关注 0票数 1

我在使用terraform时遇到了一个奇怪的问题。

考虑以下文件系统:

代码语言:javascript
运行
复制
├── Modules
│   └── IAM
│       ├── outputs.tf
│       ├── resources.tf
│       └── variables.tf
├── outputs.tf
├── providers.tf
├── resources.tf

(Created automatically  by Terraform)
├── terraform.tfstate
└── terraform.tfstate.backup

我从IAM模块调用root模块:

代码语言:javascript
运行
复制
##resources.tf

# Other Resource configuration...


# Calling IAM module
module "iam" {
  source = "Modules/IAM"
}

这很简单,在我重命名模块的文件夹 name之前,一切都很好。

文件夹的原始名称是IAM_Module,当我将它更改为IAM时,事情就开始中断了。

terraform init的输出(模块的名称是iam,所以不要混淆):

代码语言:javascript
运行
复制
Initializing modules...
- module.iam
Error downloading modules: Error loading modules: module iam:
open .terraform/modules/94...5b: no such file or directory

.terraform/modules内部检查,我可以看到,由于某种原因,指向文件夹旧名称(IAM_Module)的符号链接仍然存在:

代码语言:javascript
运行
复制
├── 94...5b -> /lab1/Modules/IAM
├── b7...3d -> /lab1/Modules/IAM_Module <--- Previous name of folder
└── modules.json

terraform.tfstate内部,我可以看到模块存在(在根之后):

代码语言:javascript
运行
复制
"modules": [
    {
        "path": [
            "root"
        ],
        "outputs": {},
        "resources": {},
        "depends_on": []
    },
    {
        "path": [
            "root",
            "iam" <----- Here
        ],
        "outputs": {},
        "resources": {

我尝试过terraform refresh,但是我也收到了相同的no such file or directory错误。

Terraform版本: v0.11.11。

任何帮助都将不胜感激。

(*)在这条线中,他们似乎通过人工干预解决了相同的错误(由不同的原因引起),而我更希望避免这种错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-15 09:25:40

我又试着重复这个问题。

首先,我手动删除了.terraform文件并运行了terraform init

现在我处于文件重命名之前的状态。

在再次重命名该文件后,我运行了terraform plan,并收到了以下显式错误:

代码语言:javascript
运行
复制
Error: Error loading modules: module iam: not found, may need to run 'terraform init'.

运行terraform init后,我检查了.terraform/modules文件,并看到了2个符号链接:

  • 一个是新舱的。
  • 其中一个是旧舱,现在是红色的。

这两个模块仍然出现在modules.json文件下。

不知道为什么这条消息在我第一次尝试时就没有弹出,但我认为在这种情况下Terraform 获取命令也可能有所帮助--从文档中:

terraform命令用于下载和更新根模块中提到的模块。

在我的例子中,模块已经下载了,所以我不得不使用terraform get标志运行-update

如果已经下载了一个模块,并且没有设置-update标志,Terraform将什么也不做。

我认为在删除自动生成的文件(如terraform init / get)之前,需要考虑两种解决方案之一( .terraform )。

我希望这能帮到别人。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58856454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档