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

J. *_*ary 4 gitlab terraform terraform0.12+

我有一个ROOT_MODULEmain.tf

#Root Module - Just run the script
resource "null_resource" "example" {
  provisioner "local_exec" {
    command = "./script.sh"
}
Run Code Online (Sandbox Code Playgroud)

script.sh

echo "Hello world
Run Code Online (Sandbox Code Playgroud)

现在我在其他地方有另一个目录,我用另一个目录创建了一个CHILD_MODULEmain.tf

#Child Module
module "ROOT_MODULE" {
  source = "gitlabURL/ROOT_MODULE"
}
Run Code Online (Sandbox Code Playgroud)

我已经导出了我的计划文件: 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
Run Code Online (Sandbox Code Playgroud)

Mat*_*ard 7

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

provisioner "local_exec" {
  command = "${path.root}/script.sh"
}
Run Code Online (Sandbox Code Playgroud)

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

provisioner "local_exec" {
  command = "${path.module}/script.sh"
}
Run Code Online (Sandbox Code Playgroud)

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

这些内在表达式记录在此处