forked from Cloud-Foundations/Dominator
/
main.go
97 lines (92 loc) · 3.28 KB
/
main.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 main
import (
"flag"
"fmt"
"os"
"github.com/Cloud-Foundations/Dominator/imageserver/httpd"
imageserverRpcd "github.com/Cloud-Foundations/Dominator/imageserver/rpcd"
"github.com/Cloud-Foundations/Dominator/imageserver/scanner"
"github.com/Cloud-Foundations/Dominator/lib/constants"
"github.com/Cloud-Foundations/Dominator/lib/flags/loadflags"
"github.com/Cloud-Foundations/Dominator/lib/log/serverlogger"
"github.com/Cloud-Foundations/Dominator/lib/objectserver/filesystem"
"github.com/Cloud-Foundations/Dominator/lib/srpc"
"github.com/Cloud-Foundations/Dominator/lib/srpc/setupserver"
objectserverRpcd "github.com/Cloud-Foundations/Dominator/objectserver/rpcd"
"github.com/Cloud-Foundations/tricorder/go/tricorder"
"github.com/Cloud-Foundations/tricorder/go/tricorder/units"
)
var (
debug = flag.Bool("debug", false, "If true, show debugging output")
imageDir = flag.String("imageDir", "/var/lib/imageserver",
"Name of image server data directory.")
imageServerHostname = flag.String("imageServerHostname", "",
"Hostname of image server to receive updates from")
imageServerPortNum = flag.Uint("imageServerPortNum",
constants.ImageServerPortNumber,
"Port number of image server")
objectDir = flag.String("objectDir", "/var/lib/objectserver",
"Name of image server data directory.")
permitInsecureMode = flag.Bool("permitInsecureMode", false,
"If true, run in insecure mode. This gives remote access to all")
portNum = flag.Uint("portNum", constants.ImageServerPortNumber,
"Port number to allocate and listen on for HTTP/RPC")
)
type imageObjectServersType struct {
imdb *scanner.ImageDataBase
objSrv *filesystem.ObjectServer
}
func main() {
if os.Geteuid() == 0 {
fmt.Fprintln(os.Stderr, "Do not run the Image Server as root")
os.Exit(1)
}
if err := loadflags.LoadForDaemon("imageserver"); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
flag.Parse()
tricorder.RegisterFlags()
logger := serverlogger.New("")
srpc.SetDefaultLogger(logger)
params := setupserver.Params{Logger: logger}
if err := setupserver.SetupTlsWithParams(params); err != nil {
if *permitInsecureMode {
logger.Println(err)
} else {
logger.Fatalln(err)
}
}
objSrv, err := filesystem.NewObjectServer(*objectDir, logger)
if err != nil {
logger.Fatalf("Cannot create ObjectServer: %s\n", err)
}
var imageServerAddress string
if *imageServerHostname != "" {
imageServerAddress = fmt.Sprintf("%s:%d", *imageServerHostname,
*imageServerPortNum)
}
imdb, err := scanner.LoadImageDataBase(*imageDir, objSrv,
imageServerAddress, logger)
if err != nil {
logger.Fatalf("Cannot load image database: %s\n", err)
}
tricorder.RegisterMetric("/image-count",
func() uint { return imdb.CountImages() },
units.None, "number of images")
imgSrvRpcHtmlWriter, err := imageserverRpcd.Setup(imdb, imageServerAddress,
objSrv, logger)
if err != nil {
logger.Fatalln(err)
}
objSrvRpcHtmlWriter := objectserverRpcd.Setup(objSrv, imageServerAddress,
logger)
httpd.AddHtmlWriter(imdb)
httpd.AddHtmlWriter(&imageObjectServersType{imdb, objSrv})
httpd.AddHtmlWriter(imgSrvRpcHtmlWriter)
httpd.AddHtmlWriter(objSrvRpcHtmlWriter)
httpd.AddHtmlWriter(logger)
if err = httpd.StartServer(*portNum, imdb, objSrv, false); err != nil {
logger.Fatalf("Unable to create http server: %s\n", err)
}
}