-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.go
93 lines (72 loc) · 2.9 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
package main
import (
"os"
"time"
_ "github.com/jackc/pgx/v4/stdlib"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/unweave/unweave-v1/api/router"
"github.com/unweave/unweave-v1/api/server"
"github.com/unweave/unweave-v1/db"
"github.com/unweave/unweave-v1/providers/awsprov"
"github.com/unweave/unweave-v1/providers/lambdalabs"
"github.com/unweave/unweave-v1/services/execsrv"
"github.com/unweave/unweave-v1/services/sshkeys"
"github.com/unweave/unweave-v1/services/volumesrv"
"github.com/unweave/unweave-v1/tools/gonfig"
)
func main() {
cfg := server.Config{}
gonfig.GetFromEnvVariables(&cfg)
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
log.Logger = log.Output(zerolog.ConsoleWriter{
Out: os.Stdout,
TimeFormat: time.RFC3339,
})
conn, err := db.Connect(cfg.DB)
if err != nil {
log.Fatal().Err(err).Msg("failed to connect to database")
}
db.Q = db.New(conn)
// Initialize unweave from environment variables
runtimeCfg := &EnvInitializer{}
execStore := execsrv.NewPostgresStore()
volStore := volumesrv.NewPostgresStore()
lls := lambdaLabsService(execStore, volStore)
awss := awsService(execStore, volStore)
delegatingExecSrv := execsrv.NewDelegatingService(execStore, lls, awss)
execRouter := router.NewExecRouter(runtimeCfg, execStore, delegatingExecSrv)
sshKeysRouter := router.NewSSHKeysRouter(sshkeys.NewService())
server.API(cfg, runtimeCfg, execRouter, sshKeysRouter)
}
func lambdaLabsService(execStore execsrv.Store, volStore volumesrv.Store) execsrv.Service {
llDriver, err := lambdalabs.NewAuthenticatedLambdaLabsDriver("")
if err != nil {
panic(err)
}
llStateInf := execsrv.NewPollingStateInformerManager(execStore, llDriver)
llStatsInf := execsrv.NewPollingStatsInformerManager(execStore, llDriver)
llHeartbeatInf := execsrv.NewPollingHeartbeatInformerManager(llDriver, 10)
llVolumeSrv := volumesrv.NewService(volStore, llDriver)
lls := execsrv.NewService(execStore, llDriver, llVolumeSrv, llStateInf, llStatsInf, llHeartbeatInf)
lls = execsrv.WithStateObserver(lls, execsrv.NewStateObserverFactory(lls))
if err = lls.Init(); err != nil {
panic(err)
}
return lls
}
func awsService(execStore execsrv.Store, volStore volumesrv.Store) execsrv.Service {
ec2, sts, iam, err := awsprov.NewAwsApis("", "", "")
if err != nil {
panic(err)
}
execDriver := awsprov.NewExecDriverAPI("", "", ec2, sts, iam)
volDriver := awsprov.NewVolumeDriverAPI("", "", ec2)
awsStateInf := execsrv.NewPollingStateInformerManager(execStore, execDriver)
awsStatsInf := execsrv.NewPollingStatsInformerManager(execStore, execDriver)
awsHeartbeatInf := execsrv.NewPollingHeartbeatInformerManager(execDriver, 10)
awsVolumeSrv := volumesrv.NewService(volStore, volDriver)
awss := execsrv.NewService(execStore, execDriver, awsVolumeSrv, awsStateInf, awsStatsInf, awsHeartbeatInf)
awss = execsrv.WithStateObserver(awss, execsrv.NewStateObserverFactory(awss))
return awss
}