Skip to content

Commit b97b996

Browse files
committed
Implement interactive server selection
1 parent 73d611d commit b97b996

File tree

2 files changed

+65
-17
lines changed

2 files changed

+65
-17
lines changed

main.go

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"strings"
99
flags "github.com/jessevdk/go-flags"
1010
"github.com/webdevops/go-shell"
11+
"gopkg.in/AlecAivazis/survey.v1"
1112
"./sync"
1213
"./logger"
1314
)
@@ -26,10 +27,11 @@ var (
2627

2728
var opts struct {
2829
Positional struct {
29-
Command string `description:"What to do [help, dump, sync, deploy or show]" choice:"show" choice:"dump" choice:"sync" choice:"deploy" choice:"hjelp" required:"1"`
30+
Command string `description:"What to do [help, sync, deploy or show]" choice:"show" choice:"sync" choice:"deploy" choice:"help" required:"1"`
3031
Server string `description:"server configuration key"`
3132
} `positional-args:"true"`
3233

34+
Dump bool ` long:"dump" description:"dump configuration as yaml"`
3335
Verbose []bool `short:"v" long:"verbose" description:"verbose mode"`
3436
DryRun bool ` long:"dry-run" description:"dry run mode"`
3537
ShowVersion bool `short:"V" long:"version" description:"show version and exit"`
@@ -106,6 +108,19 @@ func findConfigFile() string {
106108
return ""
107109
}
108110

111+
func getArgServer(config *sync.SyncConfig, confType string) string {
112+
server := opts.Positional.Server
113+
if server == "" {
114+
prompt := &survey.Select{
115+
Message: "Choose configuration:",
116+
Options: config.GetServerList(confType),
117+
}
118+
survey.AskOne(prompt, &server, nil)
119+
}
120+
121+
return server
122+
}
123+
109124
func main() {
110125
createArgparser()
111126

@@ -141,39 +156,55 @@ func main() {
141156
}
142157
Logger.Step("found configuration file %s", configFile)
143158

144-
145159
sync.Logger = Logger
146160
config := sync.NewConfigParser(configFile)
147161

148162
switch argCommand {
149163
case "show":
164+
//----------------------
165+
// Show
166+
//----------------------
150167
config.ShowConfiguration()
151-
case "dump":
152-
confServer, err := config.GetSyncServer(opts.Positional.Server)
153-
if err != nil {
154-
Logger.FatalErrorExit(3, err)
155-
}
156-
fmt.Println()
157-
fmt.Println(confServer.AsYaml())
158168
case "sync":
159-
confServer, err := config.GetSyncServer(opts.Positional.Server)
169+
//----------------------
170+
// Sync
171+
//----------------------
172+
server := getArgServer(config, "sync")
173+
confServer, err := config.GetSyncServer(server)
160174
if err != nil {
161175
Logger.FatalErrorExit(3, err)
162176
}
163-
Logger.Step("using %s server", opts.Positional.Server)
177+
Logger.Step("using %s server", server)
164178
Logger.Step("using connection %s", confServer.Connection.String())
165-
confServer.Sync()
179+
180+
// --dump
181+
if opts.Dump {
182+
fmt.Println()
183+
fmt.Println(confServer.AsYaml())
184+
} else {
185+
confServer.Sync()
186+
Logger.Println("-> finished")
187+
}
166188
case "deploy":
167-
confServer, err := config.GetDeployServer(opts.Positional.Server)
189+
//----------------------
190+
// Deploy
191+
//----------------------
192+
server := getArgServer(config, "deploy")
193+
confServer, err := config.GetDeployServer(server)
168194
if err != nil {
169195
Logger.FatalErrorExit(3, err)
170196
}
171-
Logger.Step("using %s server", opts.Positional.Server)
197+
Logger.Step("using %s server", server)
172198
Logger.Step("using connection %s", confServer.Connection.String())
173-
confServer.Deploy()
199+
// --dump
200+
if opts.Dump {
201+
fmt.Println()
202+
fmt.Println(confServer.AsYaml())
203+
} else {
204+
confServer.Deploy()
205+
Logger.Println("-> finished")
206+
}
174207
}
175208

176-
Logger.Println("-> finished")
177-
178209
os.Exit(0)
179210
}

sync/configparser.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,23 @@ func (config *SyncConfig) GetDeployServer(serverName string) (Server, error) {
6060
}
6161
}
6262

63+
func (config *SyncConfig) GetServerList(confType string) []string {
64+
ret := []string{}
65+
66+
switch confType {
67+
case "sync":
68+
for key := range config.Sync {
69+
ret = append(ret, key)
70+
}
71+
case "deploy":
72+
for key := range config.Deploy {
73+
ret = append(ret, key)
74+
}
75+
}
76+
77+
return ret
78+
}
79+
6380
func (config *SyncConfig) ListServer() map[string][]string {
6481
ret := map[string][]string{}
6582

0 commit comments

Comments
 (0)