diff --git a/internal/exec/terraform.go b/internal/exec/terraform.go index e2931c6cb..1d2314100 100644 --- a/internal/exec/terraform.go +++ b/internal/exec/terraform.go @@ -345,15 +345,7 @@ func ExecuteTerraform(info schema.ConfigAndStacksInfo) error { case "refresh": allArgsAndFlags = append(allArgsAndFlags, []string{varFileFlag, varFile}...) case "apply": - if info.UseTerraformPlan { - if info.PlanFile != "" { - // If the planfile name was passed on the command line, use it - allArgsAndFlags = append(allArgsAndFlags, []string{info.PlanFile}...) - } else { - // Otherwise, use the planfile name what is autogenerated by Atmos - allArgsAndFlags = append(allArgsAndFlags, []string{planFile}...) - } - } else { + if !info.UseTerraformPlan { allArgsAndFlags = append(allArgsAndFlags, []string{varFileFlag, varFile}...) } case "init": @@ -370,6 +362,19 @@ func ExecuteTerraform(info schema.ConfigAndStacksInfo) error { allArgsAndFlags = append(allArgsAndFlags, info.AdditionalArgsAndFlags...) + // Add any args we're generating -- terraform is picky about ordering flags + // and args, so these args need to go after any flags, including those + // specified in AdditionalArgsAndFlags. + if info.SubCommand == "apply" && info.UseTerraformPlan { + if info.PlanFile != "" { + // If the planfile name was passed on the command line, use it + allArgsAndFlags = append(allArgsAndFlags, []string{info.PlanFile}...) + } else { + // Otherwise, use the planfile name what is autogenerated by Atmos + allArgsAndFlags = append(allArgsAndFlags, []string{planFile}...) + } + } + // Run `terraform workspace` before executing other terraform commands // only if the `TF_WORKSPACE` environment variable is not set by the caller if info.SubCommand != "init" && !(info.SubCommand == "workspace" && info.SubCommand2 != "") {