-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathapp.go
106 lines (85 loc) · 2.83 KB
/
app.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
package main
import (
"encoding/json"
"io/ioutil"
"os"
libDatabox "github.com/me-box/lib-go-databox"
)
func main() {
DOCKER_API_VERSION := "1.37" //TODO store version in ContainerManagerOptions
os.Setenv("DOCKER_API_VERSION", DOCKER_API_VERSION)
//get cm options from secret DATABOX_CM_OPTIONS
cmOptionsJSON, err := ioutil.ReadFile("/run/secrets/DATABOX_CM_OPTIONS")
libDatabox.ChkErrFatal(err)
var options libDatabox.ContainerManagerOptions
err = json.Unmarshal(cmOptionsJSON, &options)
libDatabox.ChkErrFatal(err)
generateDataboxCertificates(options.InternalIPs, options.ExternalIP, options.Hostname)
generateArbiterTokens()
databox := NewDataboxLoader(&options)
rootCASecretID, zmqPublic, zmqPrivate := databox.Start()
libDatabox.Debug("key IDs :: " + rootCASecretID + " " + zmqPublic + " " + zmqPrivate)
cm := NewContainerManager(rootCASecretID, zmqPublic, zmqPrivate, &options)
_, err = cm.WaitForService("arbiter", 10)
libDatabox.ChkErrFatal(err)
//Start the databox cm Uis and do initial configuration
cm.Start()
//Wait for a quit message
quit := make(chan int)
<-quit // blocks until quit is written to. Which is never for now!!
}
var certsBasePath = "./certs"
func generateArbiterTokens() {
components := []string{
"container-manager",
"databox-network",
"arbiter",
}
if _, err := os.Stat(certsBasePath); err != nil {
os.Mkdir(certsBasePath, 0700)
}
for _, name := range components {
if _, err := os.Stat(certsBasePath + "/arbiterToken-" + name); err == nil {
continue
}
GenerateArbiterTokenToFile(certsBasePath + "/arbiterToken-" + name)
}
}
func generateDataboxCertificates(IPs []string, externalIP string, hostname string) {
rootCAPath := certsBasePath + "/containerManager.crt"
rootCAPathPub := certsBasePath + "/containerManagerPub.crt"
if _, err := os.Stat(rootCAPath); err != nil {
GenRootCA(rootCAPath, rootCAPathPub)
}
//container-manager needs extra information
if _, err := os.Stat(certsBasePath + "/container-manager.pem"); err != nil {
libDatabox.Debug("[generateDataboxCertificates] making cert for container-manager")
GenCertToFile(
rootCAPath,
"container-manager",
append([]string{externalIP, "127.0.0.1"}, IPs...), //“…” is syntax for variadic arguments
[]string{"container-manager", "localhost", hostname},
certsBasePath+"/container-manager.pem",
)
}
components := []string{
"databox-network",
"export-service",
"arbiter",
"app-server",
}
for _, name := range components {
if _, err := os.Stat(certsBasePath + "/" + name + ".pem"); err == nil {
continue
}
libDatabox.Debug("[generateDataboxCertificates] making cert for " + name)
libDatabox.Info("Making cert " + certsBasePath + "/" + name + ".pem")
GenCertToFile(
rootCAPath,
name,
[]string{"127.0.0.1"},
[]string{name, "localhost"},
certsBasePath+"/"+name+".pem",
)
}
}