command: more manageable shadow error output

This commit is contained in:
Mitchell Hashimoto 2016-11-21 15:05:49 -08:00
parent 91378d0499
commit 251231e3ee
No known key found for this signature in database
GPG Key ID: 744E147AA52F5B0A
1 changed files with 14 additions and 5 deletions

View File

@ -5,10 +5,12 @@ import (
"flag" "flag"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"log" "log"
"os" "os"
"path/filepath" "path/filepath"
"strconv" "strconv"
"time"
"github.com/hashicorp/errwrap" "github.com/hashicorp/errwrap"
"github.com/hashicorp/go-getter" "github.com/hashicorp/go-getter"
@ -496,6 +498,14 @@ func (m *Meta) outputShadowError(err error, output bool) bool {
return false return false
} }
// Write the shadow error output to a file
path := fmt.Sprintf("terraform-error-%d.log", time.Now().UTC().Unix())
if err := ioutil.WriteFile(path, []byte(err.Error()), 0644); err != nil {
// If there is an error writing it, just let it go
log.Printf("[ERROR] Error writing shadow error: %s", err)
return false
}
// Output! // Output!
m.Ui.Output(m.Colorize().Color(fmt.Sprintf( m.Ui.Output(m.Colorize().Color(fmt.Sprintf(
"[reset][bold][yellow]\nExperimental feature failure! Please report a bug.\n\n"+ "[reset][bold][yellow]\nExperimental feature failure! Please report a bug.\n\n"+
@ -505,14 +515,13 @@ func (m *Meta) outputShadowError(err error, output bool) bool {
"background. These features cannot affect real state and never touch\n"+ "background. These features cannot affect real state and never touch\n"+
"real infrastructure. If the features work properly, you see nothing.\n"+ "real infrastructure. If the features work properly, you see nothing.\n"+
"If the features fail, this message appears.\n\n"+ "If the features fail, this message appears.\n\n"+
"The following failures happened while running experimental features.\n"+
"Please report a Terraform bug so that future Terraform versions that\n"+
"enable these features can be improved!\n\n"+
"You can report an issue at: https://github.com/hashicorp/terraform/issues\n\n"+ "You can report an issue at: https://github.com/hashicorp/terraform/issues\n\n"+
"%s\n\n"+ "The failure was written to %q. Please\n"+
"double check this file contains no sensitive information and report\n"+
"it with your issue.\n\n"+
"This is not an error. Your terraform operation completed successfully\n"+ "This is not an error. Your terraform operation completed successfully\n"+
"and your real infrastructure is unaffected by this message.", "and your real infrastructure is unaffected by this message.",
err, path,
))) )))
return true return true