Terraform-加载模块时出错-没有此类文件或目录(文件夹重命名后)
我在使用时遇到了一个奇怪的问题 考虑以下文件系统:Terraform-加载模块时出错-没有此类文件或目录(文件夹重命名后),terraform,amazon-web-services,Terraform,Amazon Web Services,我在使用时遇到了一个奇怪的问题 考虑以下文件系统: ├── Modules │ └── IAM │ ├── outputs.tf │ ├── resources.tf │ └── variables.tf ├── outputs.tf ├── providers.tf ├── resources.tf (Created automatically by Terraform) ├── terraform.tfstate └── terraform.tfs
├── Modules
│ └── IAM
│ ├── outputs.tf
│ ├── resources.tf
│ └── variables.tf
├── outputs.tf
├── providers.tf
├── resources.tf
(Created automatically by Terraform)
├── terraform.tfstate
└── terraform.tfstate.backup
我从root
模块调用IAM
模块:
##resources.tf
# Other Resource configuration...
# Calling IAM module
module "iam" {
source = "Modules/IAM"
}
这很简单,在我重命名模块的文件夹名称之前,一切都很正常
文件夹的原始名称是IAM_Module
,当我将其更改为IAM
时,事情开始崩溃
terraforminit
的输出(模块的名称为iam
,因此不要混淆):
查看.terraform/modules
内部,我可以看到由于某些原因,指向文件夹旧名称(IAM_Module
)的符号链接仍然存在:
├── 94...5b -> /lab1/Modules/IAM
├── b7...3d -> /lab1/Modules/IAM_Module <--- Previous name of folder
└── modules.json
我试图terraform刷新
,但我收到了相同的文件或目录
错误
地形版本:v0.11.11
任何帮助都将不胜感激
(*)在这方面,他们似乎通过手动干预解决了相同的错误(由不同原因引起),我更愿意避免这种情况。我再次尝试重现该问题。
首先,我手动删除了
.terraform
文件,并运行了terraforminit
现在我处于文件重命名之前的状态 再次重命名文件后,我运行了
terraform plan
,并收到以下明确错误:
Error: Error loading modules: module iam: not found, may need to run 'terraform init'.
运行terraforminit
后,我检查了.terraform/modules
文件,看到了两个符号链接:-一个用于新模块
-一个用于旧模块,该模块现在被涂成红色
这两个模块仍然出现在
modules.json
文件下
我不知道为什么我第一次尝试时没有弹出这个消息,但我认为在这种情况下,地形也可能会有所帮助-从文档:
terraform get命令用于下载和更新模块
在根模块中提到
在我的情况下,模块已经下载,因此我必须使用-update
标志运行terraform get
:
如果模块已下载且未设置-update标志,
地形不会做任何事
我认为在删除像
.terraform
这样的自动生成文件之前,需要考虑两种解决方案之一(terraforminit/get
)
我希望这会对某人有所帮助。您是否尝试过从
.terraform
中删除旧模块?你可能需要先将你的资源terraformstatemv
以避免状态问题。我想如果我手动删除它,它可能会工作,但我正在搜索一个不包括手动设置内部文件的解决方案。这将是一次性清理,而不是设置。但是如果我要重命名其中一个模块文件夹,我必须重新运行它吗?
"modules": [
{
"path": [
"root"
],
"outputs": {},
"resources": {},
"depends_on": []
},
{
"path": [
"root",
"iam" <----- Here
],
"outputs": {},
"resources": {
Error: Error loading modules: module iam: not found, may need to run 'terraform init'.