-
Notifications
You must be signed in to change notification settings - Fork 25
/
cluster_config.go
97 lines (75 loc) · 2.14 KB
/
cluster_config.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
package clients
import (
"encoding/json"
"fmt"
"os"
)
// ClusterConfig defines a config file which is used to store Nomad cluster
// connection info
type ClusterConfig struct {
// Location of the Cluster
LocalAddress string `json:"local_address"`
RemoteAddress string `json:"remote_address"`
// Port the API Server is running on
APIPort int `json:"api_port"`
// Port the API Server is running on reachable from
// a remote network
RemoteAPIPort int `json:"remote_api_port"`
// Port where the connector is running
ConnectorPort int `json:"connector_port"`
// Number of nodes in the cluster
NodeCount int `json:"node_count"`
// Does the API use SSL?
SSL bool `json:"ssl"`
context Context
}
// Context is a type which stores the context for the cluster
type Context string
// LocalContext defines a constant for the local context
const LocalContext Context = "local"
// RemoteContext defines a constant for the remote context
const RemoteContext Context = "remote"
// Load the config from a file
func (n *ClusterConfig) Load(file string, context Context) error {
f, err := os.Open(file)
if err != nil {
return err
}
n.context = context
return json.NewDecoder(f).Decode(n)
}
// Save the config to a file
func (n *ClusterConfig) Save(file string) error {
// if the file exists delete
fs, err := os.Stat(file)
if err != nil && fs != nil {
err := os.Remove(file)
if err != nil {
return err
}
}
f, err := os.Create(file)
if err != nil {
return err
}
defer f.Close()
return json.NewEncoder(f).Encode(n)
}
// APIAddress returns the FQDN for the API server
func (n *ClusterConfig) APIAddress() string {
protocol := "http"
if n.SSL {
protocol = "https"
}
if n.context == LocalContext {
return fmt.Sprintf("%s://%s:%d", protocol, n.LocalAddress, n.APIPort)
}
return fmt.Sprintf("%s://%s:%d", protocol, n.RemoteAddress, n.RemoteAPIPort)
}
// ConnectorAddress returns the FQDN for the gRPC endpoing of the Connector
func (n *ClusterConfig) ConnectorAddress() string {
if n.context == LocalContext {
return fmt.Sprintf("%s:%d", n.LocalAddress, n.ConnectorPort)
}
return fmt.Sprintf("%s:%d", n.RemoteAddress, n.ConnectorPort)
}