forked from getlunaform/go-terraform
-
Notifications
You must be signed in to change notification settings - Fork 1
/
output.go
91 lines (75 loc) · 1.78 KB
/
output.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package goterraform
import (
"io"
"github.com/fatih/color"
"fmt"
)
type TerraformOutput struct {
Stderr io.ReadCloser
Stdout io.ReadCloser
}
const (
STDERR = "stderr"
STDOUT = "stdout"
)
func NewOutputLogs() *OutputLog {
return &OutputLog{
Entries: make([]*OutputLogEntry, 0),
}
}
func (ol *OutputLog) Error(err error) *OutputLogEntry {
return ol.Stderr(err.Error())
}
func (ol *OutputLog) Stdout(message string) *OutputLogEntry {
return ol.StdoutWithTags(message, []string{"tf"})
}
func (ol *OutputLog) StdoutWithTags(message string, tags []string) *OutputLogEntry {
return ol.Append(&OutputLogEntry{
Type: STDOUT,
Content: message,
Tags: tags,
})
}
func (ol *OutputLog) Stderr(message string) *OutputLogEntry {
return ol.StderrWithTags(message, []string{"tf"})
}
func (ol *OutputLog) StderrWithTags(message string, tags []string) *OutputLogEntry {
return ol.Append(&OutputLogEntry{
Type: STDERR,
Content: message,
Tags: tags,
})
}
func (ol *OutputLog) Append(ole *OutputLogEntry) *OutputLogEntry {
ol.Entries = append(ol.Entries, ole)
return ole
}
func (ol *OutputLog) String() (output string) {
output = ""
for _, entry := range ol.Entries {
output = output + entry.String() + "\n"
}
return
}
type OutputLog struct {
Entries []*OutputLogEntry `json:"entries"`
}
type OutputLogEntry struct {
Type string `json:"type"`
Content string `json:"content"`
Tags []string `json:"prefix"`
}
func (ole *OutputLogEntry) String() string {
tags := ""
for _, tag := range ole.Tags {
tags = tags + "[" + tag + "]"
}
var prefix string
if ole.Type == STDERR {
prefix = color.RedString("[stderr]")
tags = color.RedString(tags)
} else if ole.Type == STDOUT {
prefix = "[stdout]"
}
return fmt.Sprintf("%s%s %s", prefix, tags, ole.Content)
}