Terraform - 从子模块访问根模块脚本

Terraform - access root module script from child module

我有一个 ROOT_MODULE main.tf:

#Root Module - Just run the script
resource "null_resource" "example" {
  provisioner "local_exec" {
    command = "./script.sh"
}

script.sh

echo "Hello world

现在我在其他地方有另一个目录,我在其中创建了一个 CHILD_MODULE 和另一个 main.tf:

#Child Module
module "ROOT_MODULE" {
  source = "gitlabURL/ROOT_MODULE"
}

我已经导出我的计划文件:terraform plan -out="planfile" 但是,当我对计划文件执行 terraform apply 时,我当前所在的目录不再知道 script.sh 在哪里。我需要将脚本保存在与根模块相同的目录中。该脚本也在 gitlab 存储库中,因此我没有本地路径来调用它。 知道如何将此脚本放入我的子模块/从我的计划文件中执行它吗?

Error running command './script.sh': exit status 1. Output: cannot access 'script.sh': No such file or directory

您可以访问根模块配置的路径以保留具有 path.root 内在文件的路径:

provisioner "local_exec" {
  command = "${path.root}/script.sh"
}

但是,根据您的问题,您似乎已经交换了根模块和子模块的术语。因此,该模块似乎确实是您的子模块而不是根模块,您需要使用 path.module intrinsic:

访问路径
provisioner "local_exec" {
  command = "${path.module}/script.sh"
}

然后无论您当前的工作目录如何,脚本的路径都将被保留。

记录了这些内在表达式 here