使用Terragrunt调用Terraform时获取当前工作目录失败求助
解决Terragrunt/Terraform获取工作目录的问题
你的local-exec命令生成空文件,核心原因是对shell环境变量的使用有误,再加上Terragrunt的工作目录特性,下面给你几个针对性的解决方案:
1. 快速修复:直接执行pwd命令
你写的echo $pwd里,小写的$pwd不是标准shell环境变量——shell里存储当前工作目录的是大写的$PWD,而小写pwd是打印目录的命令,直接引用$pwd会被shell解析为空值。最简单的修复是直接调用pwd命令:
resource null_resource "pwd" { triggers = { always_run = uuid() } provisioner "local-exec" { command = "pwd >> somefile.txt" } }
这样会直接输出当前shell的工作目录到文件。
2. 更可靠:用Terraform内置变量path.cwd
如果不想依赖shell环境,建议用Terraform原生的path.cwd变量,它会直接返回Terraform当前的工作目录,结果更稳定:
resource null_resource "pwd" { triggers = { always_run = uuid() } provisioner "local-exec" { command = "echo ${path.cwd} >> somefile.txt" } }
这个变量不受shell差异影响,是Terraform官方推荐的路径获取方式。
3. 针对Terragrunt:获取它的根工作目录
如果你需要的是Terragrunt配置文件所在的目录(而不是它临时生成的Terraform执行目录),可以通过Terragrunt传递变量:
首先在terragrunt.hcl中添加输入变量:
inputs = { terragrunt_root_dir = get_terragrunt_dir() }
然后在Terraform代码里定义并使用这个变量:
variable "terragrunt_root_dir" { type = string } resource null_resource "pwd" { triggers = { always_run = uuid() } provisioner "local-exec" { command = "echo ${var.terragrunt_root_dir} >> somefile.txt" } }
这样就能拿到Terragrunt的根目录,而不是它临时执行Terraform的路径。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

