-
Notifications
You must be signed in to change notification settings - Fork 33
/
generator.go
79 lines (70 loc) · 1.34 KB
/
generator.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
package main
import (
"bufio"
"html/template"
"os"
"strings"
"sync"
log "github.com/sirupsen/logrus"
)
var replacer *strings.Replacer
var varPrefix = "var."
var tfFileExt = "*.tf"
var dstFile = "./variables.tf"
var varTemplate = template.Must(template.New("var_file").Parse(`{{range .}}
variable "{{ . }}" {
description = ""
}
{{end}}
`))
func init() {
replacer = strings.NewReplacer(":", ".",
"]", "",
"}", "",
"{", "",
"\"", "",
")", "",
"(", "",
"[", "",
",", "",
"var.", "",
" ", "",
)
}
func main() {
if fileExists(dstFile) {
userPromt()
}
tfFiles, err := getAllFiles(tfFileExt)
if len(tfFiles) == 0 {
log.Warn("No terraform files to proceed, exiting")
os.Exit(0)
}
checkError(err)
var wg sync.WaitGroup
messages := make(chan string)
wg.Add(len(tfFiles))
t := &terraformVars{}
for _, file := range tfFiles {
go func(file string) {
defer wg.Done()
fileHandle, _ := os.Open(file)
defer fileHandle.Close()
fileScanner := bufio.NewScanner(fileHandle)
for fileScanner.Scan() {
messages <- fileScanner.Text()
}
}(file)
}
go func() {
for text := range messages {
t.matchVarPref(text, varPrefix)
}
}()
wg.Wait()
f, err := os.Create(dstFile)
checkError(err)
err = varTemplate.Execute(f, t.Variables)
checkError(err)
log.Infof("Variables are generated to %q file", dstFile)
}