diff --git a/modules/terraform/cmd.go b/modules/terraform/cmd.go index 3591c083a..c53132e6c 100644 --- a/modules/terraform/cmd.go +++ b/modules/terraform/cmd.go @@ -69,6 +69,9 @@ func RunTerraformCommandE(t testing.TestingT, additionalOptions *Options, additi options, args := GetCommonOptions(additionalOptions, additionalArgs...) cmd := generateCommand(options, args...) + if additionalOptions.WorkspaceDir != "" { + cmd.WorkingDir = additionalOptions.WorkspaceDir + } description := fmt.Sprintf("%s %v", options.TerraformBinary, args) return retry.DoWithRetryableErrorsE(t, description, options.RetryableTerraformErrors, options.MaxRetries, options.TimeBetweenRetries, func() (string, error) { return shell.RunCommandAndGetOutputE(t, cmd) @@ -81,6 +84,9 @@ func RunTerraformCommandAndGetStdoutE(t testing.TestingT, additionalOptions *Opt options, args := GetCommonOptions(additionalOptions, additionalArgs...) cmd := generateCommand(options, args...) + if additionalOptions.WorkspaceDir != "" { + cmd.WorkingDir = additionalOptions.WorkspaceDir + } description := fmt.Sprintf("%s %v", options.TerraformBinary, args) return retry.DoWithRetryableErrorsE(t, description, options.RetryableTerraformErrors, options.MaxRetries, options.TimeBetweenRetries, func() (string, error) { return shell.RunCommandAndGetStdOutE(t, cmd) @@ -102,6 +108,9 @@ func GetExitCodeForTerraformCommandE(t testing.TestingT, additionalOptions *Opti additionalOptions.Logger.Logf(t, "Running %s with args %v", options.TerraformBinary, args) cmd := generateCommand(options, args...) + if additionalOptions.WorkspaceDir != "" { + cmd.WorkingDir = additionalOptions.WorkspaceDir + } _, err := shell.RunCommandAndGetOutputE(t, cmd) if err == nil { return DefaultSuccessExitCode, nil diff --git a/modules/terraform/options.go b/modules/terraform/options.go index 3e2906100..a7fe9def8 100644 --- a/modules/terraform/options.go +++ b/modules/terraform/options.go @@ -68,6 +68,7 @@ type Options struct { OutputMaxLineSize int // The max size of one line in stdout and stderr (in bytes) Logger *logger.Logger // Set a non-default logger that should be used. See the logger package for more info. Parallelism int // Set the parallelism setting for Terraform + WorkspaceDir string // Path to Workspace for Terraform commands to run in PlanFilePath string // The path to output a plan file to (for the plan command) or read one from (for the apply command) PluginDir string // The path of downloaded plugins to pass to the terraform init command (-plugin-dir) }