5
5
"log"
6
6
"fmt"
7
7
"path"
8
- "strings"
9
8
"runtime/debug"
10
9
flags "github.com/jessevdk/go-flags"
11
10
"github.com/webdevops/go-shell"
27
26
)
28
27
29
28
var opts struct {
30
- Positional struct {
31
- Command string `description:"What to do [help, sync, deploy or show]" choice:"show" choice:"sync" choice:"deploy" choice:"help" required:"1"`
32
- Server string `description:"server configuration key"`
33
- } `positional-args:"true"`
34
-
35
- Dump bool ` long:"dump" description:"dump configuration as yaml"`
36
29
Verbose []bool `short:"v" long:"verbose" description:"verbose mode"`
37
- DryRun bool ` long:"dry-run" description:"dry run mode"`
38
- ShowVersion bool `short:"V" long:"version" description:"show version and exit"`
39
- ShowOnlyVersion bool ` long:"dumpversion" description:"show only version number and exit"`
40
- ShowHelp bool `short:"h" long:"help" description:"show this help message"`
41
30
}
42
31
43
32
var validConfigFiles = []string {
@@ -50,6 +39,33 @@ var validConfigFiles = []string{
50
39
func createArgparser () {
51
40
var err error
52
41
argparser = flags .NewParser (& opts , flags .Default )
42
+ argparser .CommandHandler = func (command flags.Commander , args []string ) error {
43
+ switch {
44
+ case len (opts .Verbose ) >= 2 :
45
+ shell .Trace = true
46
+ shell .TracePrefix = "[CMD] "
47
+ Logger = logger .GetInstance (argparser .Command .Name , log .Ldate | log .Ltime | log .Lshortfile )
48
+ fallthrough
49
+ case len (opts .Verbose ) >= 1 :
50
+ logger .Verbose = true
51
+ shell .VerboseFunc = func (c * shell.Command ) {
52
+ Logger .Command (c .ToString ())
53
+ }
54
+ fallthrough
55
+ default :
56
+ if Logger == nil {
57
+ Logger = logger .GetInstance (argparser .Command .Name , 0 )
58
+ }
59
+ }
60
+
61
+ return command .Execute (args )
62
+ }
63
+
64
+ argparser .AddCommand ("version" , "Show version" , fmt .Sprintf ("Show %s version" , Name ), & VersionCommand {Name :Name , Version :Version , Author :Author })
65
+ argparser .AddCommand ("list" , "List server configurations" , "List server configurations" , & ListCommand {})
66
+ argparser .AddCommand ("sync" , "Sync from server" , "Sync filesystem and databases from server" , & SyncCommand {})
67
+ argparser .AddCommand ("deploy" , "Deploy to server" , "Deploy filesystem and databases to server" , & DeployCommand {})
68
+
53
69
args , err = argparser .Parse ()
54
70
55
71
// check if there is an parse error
@@ -62,19 +78,6 @@ func createArgparser() {
62
78
os .Exit (1 )
63
79
}
64
80
}
65
-
66
- // --dumpversion
67
- if opts .ShowOnlyVersion {
68
- fmt .Println (Version )
69
- os .Exit (0 )
70
- }
71
-
72
- // --version
73
- if opts .ShowVersion {
74
- fmt .Println (fmt .Sprintf ("%s version %s" , Name , Version ))
75
- fmt .Println (fmt .Sprintf ("Copyright (C) 2017 %s" , Author ))
76
- os .Exit (0 )
77
- }
78
81
}
79
82
80
83
func findConfigFile () string {
@@ -109,17 +112,16 @@ func findConfigFile() string {
109
112
return ""
110
113
}
111
114
112
- func getArgServer (config * sync.SyncConfig , confType string ) string {
113
- server := opts .Positional .Server
114
- if server == "" {
115
+ func getArgServer (config * sync.SyncConfig , confType string , userSelection string ) string {
116
+ if userSelection == "" {
115
117
prompt := & survey.Select {
116
118
Message : "Choose configuration:" ,
117
119
Options : config .GetServerList (confType ),
118
120
}
119
- survey .AskOne (prompt , & server , nil )
121
+ survey .AskOne (prompt , & userSelection , nil )
120
122
}
121
123
122
- return server
124
+ return userSelection
123
125
}
124
126
125
127
func main () {
@@ -138,87 +140,5 @@ func main() {
138
140
139
141
createArgparser ()
140
142
141
- argCommand := strings .ToLower (opts .Positional .Command )
142
-
143
- switch {
144
- case len (opts .Verbose ) >= 2 :
145
- shell .Trace = true
146
- shell .TracePrefix = "[CMD] "
147
- Logger = logger .GetInstance (argparser .Command .Name , log .Ldate | log .Ltime | log .Lshortfile )
148
- fallthrough
149
- case len (opts .Verbose ) >= 1 :
150
- logger .Verbose = true
151
- shell .VerboseFunc = func (c * shell.Command ) {
152
- Logger .Command (c .ToString ())
153
- }
154
- fallthrough
155
- default :
156
- if Logger == nil {
157
- Logger = logger .GetInstance (argparser .Command .Name , 0 )
158
- }
159
- }
160
-
161
- if argCommand == "help" {
162
- argparser .WriteHelp (os .Stdout )
163
- os .Exit (0 )
164
- }
165
-
166
- Logger .Main ("Initialisation" )
167
- configFile := findConfigFile ()
168
- if configFile == "" {
169
- Logger .FatalExit (2 , "Unable to find configuration file (searched %s)" , strings .Join (validConfigFiles , " " ))
170
- }
171
- Logger .Step ("found configuration file %s" , configFile )
172
-
173
- sync .Logger = Logger
174
- config := sync .NewConfigParser (configFile )
175
-
176
- switch argCommand {
177
- case "show" :
178
- //----------------------
179
- // Show
180
- //----------------------
181
- config .ShowConfiguration ()
182
- case "sync" :
183
- //----------------------
184
- // Sync
185
- //----------------------
186
- server := getArgServer (config , "sync" )
187
- confServer , err := config .GetSyncServer (server )
188
- if err != nil {
189
- Logger .FatalErrorExit (3 , err )
190
- }
191
- Logger .Step ("using Server[%s]" , server )
192
- Logger .Step ("using %s" , confServer .Connection .String ())
193
-
194
- // --dump
195
- if opts .Dump {
196
- fmt .Println ()
197
- fmt .Println (confServer .AsYaml ())
198
- } else {
199
- confServer .Sync ()
200
- Logger .Println ("-> finished" )
201
- }
202
- case "deploy" :
203
- //----------------------
204
- // Deploy
205
- //----------------------
206
- server := getArgServer (config , "deploy" )
207
- confServer , err := config .GetDeployServer (server )
208
- if err != nil {
209
- Logger .FatalErrorExit (3 , err )
210
- }
211
- Logger .Step ("using %s server" , server )
212
- Logger .Step ("using connection %s" , confServer .Connection .String ())
213
- // --dump
214
- if opts .Dump {
215
- fmt .Println ()
216
- fmt .Println (confServer .AsYaml ())
217
- } else {
218
- confServer .Deploy ()
219
- Logger .Println ("-> finished" )
220
- }
221
- }
222
-
223
143
os .Exit (0 )
224
144
}
0 commit comments