mirror of
https://git.vectorsigma.ru/public/atlantis.git
synced 2026-08-03 22:08:59 +00:00
Because of some weirdness with how terraform executes (it forks itself and assigns the parent's stderr and stdout file descriptors to the child) when terraform panics, Go's exec.CombinedOutput() blocks indefinitely even though the terraform process has exited. To handle this, we switch to using os.Pipe for the cmd's stderr/out which for some reason allows Go to know when the process has exited. Unfortunately, this brings up a new problem when reading the output from that pipe. For some reason, after a terraform crash, we never get an EOF on the pipe and so as we again get in a situation where we're blocking indefinitely. To handle this, I've added an edge case where we look at the log lines and if its the end of a terraform panic, we break out of the loop. Thanks Terraform 0.12-alpha for discovering this bug!