/
run.go
73 lines (62 loc) · 2.19 KB
/
run.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
/* SPDX-License-Identifier: AGPL-3.0-only
* Copyright (c) Edgeless Systems GmbH
* Copyright (c) Benedict Schlueter
* Copyright (c) Leonard Cohnen
*/
package main
import (
"net"
"sync"
"github.com/benschlueter/delegatio/agent/core"
"github.com/benschlueter/delegatio/agent/vmapi"
"github.com/benschlueter/delegatio/agent/vmapi/vmproto"
"github.com/benschlueter/delegatio/internal/config"
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
grpc_zap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap"
grpc_ctxtags "github.com/grpc-ecosystem/go-grpc-middleware/tags"
"go.uber.org/zap"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
var version = "0.0.0"
func run(dialer vmapi.Dialer, bindIP, bindPort string, zapLoggerCore *zap.Logger, containerMode *bool) {
defer func() { _ = zapLoggerCore.Sync() }()
zapLoggerCore.Info("starting delegatio agent", zap.String("version", version), zap.String("commit", config.Commit))
if *containerMode {
zapLoggerCore.Info("running in container mode")
} else {
zapLoggerCore.Info("running in qemu mode")
}
core, err := core.NewCore(zapLoggerCore)
if err != nil {
zapLoggerCore.Fatal("failed to create core", zap.Error(err))
}
vapi := vmapi.New(zapLoggerCore.Named("vmapi"), core, dialer)
zapLoggergRPC := zapLoggerCore.Named("gRPC")
grpcServer := grpc.NewServer(
grpc.Creds(insecure.NewCredentials()),
grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(
grpc_ctxtags.StreamServerInterceptor(),
grpc_zap.StreamServerInterceptor(zapLoggergRPC),
)),
grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(
grpc_ctxtags.UnaryServerInterceptor(),
grpc_zap.UnaryServerInterceptor(zapLoggergRPC),
)),
)
vmproto.RegisterAPIServer(grpcServer, vapi)
lis, err := net.Listen("tcp", net.JoinHostPort(bindIP, bindPort))
if err != nil {
zapLoggergRPC.Fatal("failed to create listener", zap.Error(err))
}
zapLoggergRPC.Info("server listener created", zap.String("address", lis.Addr().String()))
var wg sync.WaitGroup
defer wg.Wait()
wg.Add(1)
go func() {
defer wg.Done()
if err := grpcServer.Serve(lis); err != nil {
zapLoggergRPC.Fatal("failed to serve gRPC", zap.Error(err))
}
}()
}