Skip to content
This repository has been archived by the owner on Jun 29, 2022. It is now read-only.

Commit

Permalink
cmd: Show logs on terraform error
Browse files Browse the repository at this point in the history
If a user is running `lokoctl cluster apply/destroy` without verbose
flag `-v` and if there is an error in terraform execution then this will
show last twenty lines from the logs. This will help user in knowing
what went wrong.

Signed-off-by: Suraj Deshmukh <suraj@kinvolk.io>
  • Loading branch information
surajssd committed Apr 22, 2020
1 parent cf0720d commit c79cb50
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions pkg/terraform/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ const (
failFileSuffix = ".fail"

requiredVersion = ">= 0.12, < 0.13"

noOfLinesOnError = 20
)

// ErrBinaryNotFound denotes the fact that the Terraform binary could not be
Expand Down Expand Up @@ -219,16 +221,47 @@ func (ex *Executor) execute(verbose bool, args ...string) error {

s, err := ex.Status(pid)
if err != nil {
if !verbose {
showError(p, noOfLinesOnError)
}
return fmt.Errorf("failed checking execution status: %w", err)
}

if s != ExecutionStatusSuccess {
if !verbose {
showError(p, noOfLinesOnError)
}
return fmt.Errorf("executing Terraform failed, check %s for details", p)
}

return nil
}

func showError(path string, noOfLines int) {
// nolint: gosec
data, err := ioutil.ReadFile(path)
if err != nil {
fmt.Printf("error reading file: %v", err)
return
}

text := string(data)
lines := strings.Split(text, "\n")

// Deletion by one is done here to adjust the difference between the user provided number which
// starts counting from 1 and array indices which start counting from 0.
// nolint: gomnd
offset := len(lines) - noOfLines - 1

if offset > 0 {
lines = lines[offset:]
}

for _, line := range lines {
fmt.Println(line)
}
}

// LoadVars is a convenience function to load the tfvars file into memory
// as a JSON object.
func (ex *Executor) LoadVars() (map[string]interface{}, error) {
Expand Down

0 comments on commit c79cb50

Please sign in to comment.