【问题标题】:Terraform - access root module script from child moduleTerraform - 从子模块访问根模块脚本
【发布时间】:2021-03-16 23:29:14
【问题描述】:

我有一个 ROOT_MODULEmain.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

【问题讨论】:

    标签: gitlab terraform terraform0.12+


    【解决方案1】:

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

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

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

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

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

    这些内在表达式记录在 here

    【讨论】:

    • 同意这是答案,但你能找到最近的文档吗?因为我只能找到 0.11 版本的文档。
    • @9bO3av5fw5 它们确实已从文档中显式消失,但仍隐式存在。正在更新答案。
    • 我认为这是您正在寻找的文档:terraform.io/docs/configuration/expressions/…
    • @MartinAtkins 现在我们必须在下次有人寻找隐藏文档时对您进行 ping 操作。
    猜你喜欢
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多