使用相对本地路径引用模块时 Terraform 云失败

mlt*_*tsy 5 terraform terraform-cloud

我有一个包含多个单独配置的存储库,这些配置共享一些模块,并使用类似于../../modules/rabbitmq. 目录设置如下:

tf/
  configs/
    thing-1/
    thing-2/
  modules/
    rabbitmq/
    cluster/
    ...
Run Code Online (Sandbox Code Playgroud)

使用远程后端设置配置以使用 TF Cloud 进行运行和状态:

terraform {
  backend "remote" {
    hostname     = "app.terraform.io"
    organization = "my-org"

    workspaces {
      prefix = "config-1-"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

跑步terraform init效果很好。当我尝试在terrform plan本地运行时,它给了我一个错误提示:

Initializing modules...
- rabbitmq in 

Error: Unreadable module directory

Unable to evaluate directory symlink: lstat ../../modules: no such file or
directory
Run Code Online (Sandbox Code Playgroud)

...好像模块目录没有上传到 TF Cloud 或其他东西。是什么赋予了?

Pol*_*ase 7

使用屏幕截图更新@mlsy 答案。通过免费帐户使用Terraform Cloud。解析模块以使用本地文件系统。source

terraform version
Terraform v1.1.7
on linux_amd64
Run Code Online (Sandbox Code Playgroud)

工作区设置


mlt*_*tsy 6

结果发现问题是(惊奇,惊奇!)它没有将模块目录上传到 TF Cloud。这是因为配置和 TF Cloud 工作区设置都不包含任何表明此配置文件夹是更大文件系统的一部分的迹象。默认是只上传运行 terraform 的目录(及其所有内容)。

为了解决这个问题,我必须访问 Terraform Cloud 中给定工作区的“设置 > 常规”页面,并更改Terraform Working Directory设置以指定相对于相关根目录的配置路径 - 在这种情况下:tf/configs/config-1

之后,运行terraform plan会显示一条消息,指示它将上传哪个父目录,以传达与工作区相关的整个上下文。

  • 我的模块的相对路径遇到了同样的问题。但我不确定我是否理解你的解决方案。我在云中的“Terraform 工作目录”已定义为“沙箱”目录的路径,例如“live/sandbox”(与您的结构相同,但具有实时/不同环境)。 (2认同)