Closed dead10ck closed 4 years ago
This problem is caused by Terraform's mechanism for capturing Go panics, which re-runs Terraform inside a child process and captures the output in order to filter it for crash messages.
When Terraform itself is the one launching terraform
, such as in local-exec
, it mistakenly detects that it's already the child process and so the details of that filtering mechanism leak out.
The handling of this panic mechanism is encapsulated in the separate library panicwrap
, so the fix for this would likely need to be made over there. One possible fix is for panicwrap.Wrap
to immediately unset the environment variables it uses for detection after it's confirmed it's in the child process, so that any later code in the program -- including launching any child processes -- will see itself as a fresh execution context, not a panicwrap child.
That solution would address it for all users of panicwrap
. A more localized solution would be to have Terraform itself unset the environment variable. panicwrap
exposes DEFAULT_COOKIE_KEY
, which means that Terraform could potentially unset it without duplicating that magic value. Were Terraform to handle it, it would need to happen just before calling wrappedMain
so that it's stripped out before we run the main Terraform functionality:
@teamterraform @apparentlymart Can I pick this issue up?
Hi @avinashdhinwa!
Running Terraform recursively inside itself is an unusual use-case that I would not normally encourage, but based on the above it seems like fixing this quirk shouldn't do any harm, so I think it's fine to do it for robustness. It's likely to be more of benefit to other software than to Terraform (other software might have more reason to recursively launch itself) so I'd be inclined to try for the fix in the panicwrap
package here, which Terraform can then adopt by upgrading.
With that said, panicwrap
is not part of Terraform and so the Terraform team won't be able to merge directly over there, but we can certainly help with reviewing and communicating the change to other teams at HashiCorp so that those who do have access to merge could have an easier time doing so.
I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues.
If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.
Terraform Version
Terraform Configuration Files
Debug Output
Expected Behavior
Output of the provision command should be
default
.Actual Behavior
Output of the provision command is
o:default
.Steps to Reproduce
terraform init
terraform apply
Additional Context
This does not happen when I run
terraform workspace show
in the same directory in a different shell, while the plan is being executed. It only seems to happen when terraform is invoked within terraform.