-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain.go
149 lines (129 loc) · 3.9 KB
/
main.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package main
import (
"bufio"
"flag"
"fmt"
"log"
"os"
"strings"
"github.com/fatih/color"
"github.com/opensourcez/logger"
)
// Defines a group of user-defined information through a flag.
type flagConfig struct {
// Defines the Flag: example -project
Flag string
// Defines Flag Shorthand: example -p
Shorthand string
// A small text explaining the effect of given flag on the application
Usage string
// User input from given flag, should be set by flag.StringVars
Value string
}
var scriptFlag = flagConfig{
Flag: "script",
Shorthand: "sc",
Usage: "The path to your script file",
}
var serversFlag = flagConfig{
Flag: "servers",
Shorthand: "s",
Usage: "The path to your server file",
}
var varsFlag = flagConfig{
Flag: "vars",
Shorthand: "v",
Usage: "The path to your variables file",
}
var filterFlag = flagConfig{
Flag: "filter",
Shorthand: "f",
Usage: "Only scripts or commands with this tag will be executed. Example: SCRIPT.CMD ",
}
var ignorePrompt bool
func init() {
flag.StringVar(&scriptFlag.Value, scriptFlag.Flag, "", scriptFlag.Usage)
flag.StringVar(&scriptFlag.Value, scriptFlag.Shorthand, "", scriptFlag.Usage+" (shorthand)")
flag.StringVar(&serversFlag.Value, serversFlag.Flag, "", serversFlag.Usage)
flag.StringVar(&serversFlag.Value, serversFlag.Shorthand, "", serversFlag.Usage+" (shorthand)")
flag.StringVar(&varsFlag.Value, varsFlag.Flag, "", varsFlag.Usage)
flag.StringVar(&varsFlag.Value, varsFlag.Shorthand, "", varsFlag.Usage+" (shorthand)")
flag.StringVar(&filterFlag.Value, filterFlag.Flag, "", filterFlag.Usage)
flag.StringVar(&filterFlag.Value, filterFlag.Shorthand, "", filterFlag.Usage+" (shorthand)")
flag.BoolVar(&ignorePrompt, "ignorePrompt", false, "Add this flag to skipt the confirmation prompt")
}
func main() {
flag.Parse()
err, _ := logger.Init(&logger.LoggingConfig{
DefaultLogTag: "testing-logs",
DefaultLogLevel: "INFO",
WithTrace: true,
SimpleTrace: true,
PrettyPrint: true,
Colors: true,
Type: "stdout",
})
if err != nil {
panic(err)
}
if filterFlag.Value != "" {
splitFilter := strings.Split(filterFlag.Value, ".")
if len(splitFilter) < 2 {
log.Println("You need to specify at least two filters seperated by a dot, example: script.* or script.files etc..")
os.Exit(1)
}
ScriptFilter = splitFilter[0]
CMDFilter = splitFilter[1]
}
Deployment = new(D)
if serversFlag.Value != "" {
Deployment.Server = serversFlag.Value
}
if varsFlag.Value != "" {
Deployment.Vars = varsFlag.Value
}
if scriptFlag.Value != "" {
Deployment.Script = scriptFlag.Value
}
if Deployment.Server == "" || Deployment.Script == "" {
color.Red("One or flags are missing, please verify your command line arguments..")
fmt.Println()
fmt.Println("-server=" + Deployment.Server)
fmt.Println("-script=" + Deployment.Script)
fmt.Println("-vars=" + Deployment.Vars)
fmt.Println()
os.Exit(1)
}
LoadServers(Deployment.Server)
LoadScript(Deployment.Script)
LoadVariables(Deployment.Vars)
LoadTemplates(Deployment.Script)
InjectVariables()
if !ignorePrompt {
fmt.Println()
color.Green("You are about to run this deployment")
fmt.Println()
fmt.Println(color.GreenString("Server:"), Deployment.Server)
fmt.Println(color.GreenString("Script:"), Deployment.Script)
fmt.Println(color.GreenString("Variables:"), Deployment.Vars)
fmt.Println()
fmt.Println("Press N to cancel ..")
input := bufio.NewScanner(os.Stdin)
input.Scan()
if input.Text() == "N" || input.Text() == "n" {
os.Exit(1)
}
} else {
fmt.Println()
color.Green("Running deployment")
fmt.Println()
fmt.Println(color.GreenString("Server:"), Deployment.Server)
fmt.Println(color.GreenString("Script:"), Deployment.Script)
fmt.Println(color.GreenString("Variables:"), Deployment.Vars)
fmt.Println()
}
for i := range Servers {
OpenSessionsAndRunCommands(Servers[i])
}
ParseWaitGroup.Wait()
}