-
Notifications
You must be signed in to change notification settings - Fork 21
/
clusters.go
89 lines (71 loc) · 1.78 KB
/
clusters.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
package command
import (
"flag"
"fmt"
"strings"
"github.com/funkygao/columnize"
"github.com/funkygao/gafka/ctx"
"github.com/funkygao/gafka/zk"
"github.com/funkygao/gocli"
)
type Clusters struct {
Ui cli.Ui
Cmd string
}
func (this *Clusters) Run(args []string) (exitCode int) {
var (
zone string
cluster string
addCluster string
bootNode string
)
cmdFlags := flag.NewFlagSet("clusters", flag.ContinueOnError)
cmdFlags.Usage = func() { this.Ui.Output(this.Help()) }
cmdFlags.StringVar(&zone, "z", ctx.EsDefaultZone(), "")
cmdFlags.StringVar(&cluster, "c", "", "")
cmdFlags.StringVar(&bootNode, "bootnode", "", "")
cmdFlags.StringVar(&addCluster, "add", "", "")
if err := cmdFlags.Parse(args); err != nil {
return 1
}
zkzone := zk.NewZkZone(zk.DefaultConfig(zone, ctx.ZoneZkAddrs(zone)))
switch {
case addCluster != "":
if err := zkzone.CreateEsCluster(addCluster); err != nil {
this.Ui.Error(err.Error())
} else {
this.Ui.Infof("%s created", addCluster)
}
case bootNode != "":
if cluster == "" {
this.Ui.Error("-c required")
return 2
}
ec := zkzone.NewEsCluster(cluster)
ec.AddNode(bootNode)
default:
lines := []string{"Custer|Bootstrap"}
zkzone.ForSortedEsClusters(func(ec *zk.EsCluster) {
lines = append(lines, fmt.Sprintf("%s|%s", ec.Name, strings.Join(ec.Nodes(), ",")))
})
this.Ui.Output(columnize.SimpleFormat(lines))
}
return
}
func (*Clusters) Synopsis() string {
return "ElasticSearch clusters"
}
func (this *Clusters) Help() string {
help := fmt.Sprintf(`
Usage: %s clusters [options]
%s
Options:
-z zone
-c cluster
-add name
Add a new ElasticSearch cluster.
-bootnode host:port
Add a bootstrap node to a cluster.
`, this.Cmd, this.Synopsis())
return strings.TrimSpace(help)
}