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