forked from flynn/flynn
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcluster.go
131 lines (104 loc) · 3.06 KB
/
cluster.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
package main
import (
"errors"
"fmt"
"log"
"github.com/flynn/flynn/Godeps/_workspace/src/github.com/flynn/go-docopt"
cfg "github.com/flynn/flynn/cli/config"
)
func init() {
register("cluster", runCluster, `
usage: flynn cluster
flynn cluster add [-f] [-d] [-g <githost>] [-p <tlspin>] <cluster-name> <url> <key>
flynn cluster remove <cluster-name>
flynn cluster default [<cluster-name>]
Manage clusters in the ~/.flynnrc configuration file.
Options:
-f, --force force add cluster
-d, --default set as default cluster
-g, --git-host <githost> git host (if host differs from api URL host)
-p, --tls-pin <tlspin> SHA256 of the cluster's TLS cert (useful if it is self-signed)
Commands:
With no arguments, shows a list of clusters.
add adds a cluster to the ~/.flynnrc configuration file
remove removes a cluster from the ~/.flynnrc configuration file
default set or print the default cluster
Examples:
$ flynn cluster add -g dev.localflynn.com:2222 -p KGCENkp53YF5OvOKkZIry71+czFRkSw2ZdMszZ/0ljs= default https://controller.dev.localflynn.com e09dc5301d72be755a3d666f617c4600
Cluster "default" added.
`)
}
func runCluster(args *docopt.Args) error {
if err := readConfig(); err != nil {
return err
}
if args.Bool["add"] {
return runClusterAdd(args)
} else if args.Bool["remove"] {
return runClusterRemove(args)
} else if args.Bool["default"] {
return runClusterDefault(args)
}
w := tabWriter()
defer w.Flush()
listRec(w, "NAME", "URL")
for _, s := range config.Clusters {
if s.Name == config.Default {
listRec(w, s.Name, s.URL, "(default)")
} else {
listRec(w, s.Name, s.URL)
}
}
return nil
}
func runClusterAdd(args *docopt.Args) error {
s := &cfg.Cluster{
Name: args.String["<cluster-name>"],
URL: args.String["<url>"],
Key: args.String["<key>"],
GitHost: args.String["--git-host"],
TLSPin: args.String["--tls-pin"],
}
if err := config.Add(s, args.Bool["--force"]); err != nil {
return err
}
setDefault := args.Bool["--default"] || len(config.Clusters) == 1
if setDefault && !config.SetDefault(s.Name) {
return errors.New(fmt.Sprintf("Cluster %q does not exist and cannot be set as default.", s.Name))
}
if err := config.SaveTo(configPath()); err != nil {
return err
}
if setDefault {
log.Printf("Cluster %q added and set as default.", s.Name)
} else {
log.Printf("Cluster %q added.", s.Name)
}
return nil
}
func runClusterRemove(args *docopt.Args) error {
name := args.String["<cluster-name>"]
if config.Remove(name) {
if err := config.SaveTo(configPath()); err != nil {
return err
}
log.Printf("Cluster %q removed.", name)
}
return nil
}
func runClusterDefault(args *docopt.Args) error {
name := args.String["<cluster-name>"]
if name == "" {
log.Printf("%q is default cluster.", config.Default)
return nil
}
if !config.SetDefault(name) {
log.Printf("Cluster %q not found.", name)
return nil
}
if err := config.SaveTo(configPath()); err != nil {
return err
}
log.Printf("%q is now the default cluster.", name)
return nil
}