Terraform-加载模块时出错-没有此类文件或目录(文件夹重命名后)

时间:2019-11-14 12:08:46

标签: terraform

使用时遇到一个奇怪的问题。

请考虑以下文件系统:

├── 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模块:

##resources.tf

# Other Resource configuration...


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

这很简单,并且一切正常,直到我重命名了模块的文件夹名称

该文件夹的原始名称为IAM_Module,当我将其更改为IAM时,事情开始崩溃。

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

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)的符号链接:

├── 94...5b -> /lab1/Modules/IAM
├── b7...3d -> /lab1/Modules/IAM_Module <--- Previous name of folder
└── modules.json

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

"modules": [
    {
        "path": [
            "root"
        ],
        "outputs": {},
        "resources": {},
        "depends_on": []
    },
    {
        "path": [
            "root",
            "iam" <----- Here
        ],
        "outputs": {},
        "resources": {

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

Terraform版本:v0.11.11。

任何帮助将不胜感激。


(*)在this thread中,他们似乎是通过人工干预解决了相同的错误(由于不同的原因而导致),我希望避免这种情况。

1 个答案:

答案 0 :(得分:0)

我试图再次重现该问题。

首先,我手动删除了.terraform文件并运行了terraform init
现在,我处于文件重命名之前的状态。

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

Error: Error loading modules: module iam: not found, may need to run 'terraform init'.

运行terraform init后,我检查了.terraform/modules文件并看到2个符号链接:
-一个用于新模块的链接。
-一个用于旧模块的模块,现在已变成红色

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

不确定为什么我第一次尝试时未弹出此消息,但我认为在这种情况下Terraform get command可能也有帮助-来自文档:

  

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

就我而言,该模块已下载完毕,因此我必须使用terraform get标志运行-update

  

如果已经下载了模块并且未设置-update标志,   Terraform不会执行任何操作。


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

我希望这会对某人有所帮助。