mirror of
https://git.vectorsigma.ru/public/atlantis.git
synced 2026-08-06 13:08:20 +00:00
b1e32643f5c468acd73ebf3b7e20dd796e83bb0c
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!
Atlantis
Resources
- How to get started: www.runatlantis.io/guide
- Full documentation: www.runatlantis.io/docs
- Download the latest release: github.com/runatlantis/atlantis/releases/latest
- Get help in our Slack channel or our Gitter channel
- Start Contributing: CONTRIBUTING.md
What is Atlantis?
A self-hosted golang application that listens for Terraform pull request events via webhooks.
What does it do?
Runs terraform plan and apply remotely and comments back on the pull request with the output.
Why should you use it?
- Make Terraform changes visible to your whole team.
- Enable non-operations engineers to collaborate on Terraform.
- Standardize your Terraform workflows.

