-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
87 lines (76 loc) · 2.68 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
package main
import (
"context"
"github.com/anvouk/veryfreshpod/app"
"go.uber.org/zap"
appsV1 "k8s.io/api/apps/v1"
"os"
"os/signal"
"syscall"
)
func main() {
config := app.NewConfig()
logger := app.NewSugaredLogger(config)
defer func(logger *zap.SugaredLogger) {
_ = logger.Sync()
}(logger)
logger.Infof("veryfreshpod starting")
logger.Infof("debug mode: %v", config.Debug)
ctx, cancel := context.WithCancel(context.Background())
go func() {
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
sig := <-signalChan
logger.Infof("received signal: %v", sig.String())
cancel()
}()
docker, err := app.NewDockerClient(logger, ctx)
if err != nil {
logger.Fatalw("failed creating docker client", "error", err)
}
k8s, err := app.NewK8sClient(logger)
if err != nil {
logger.Fatalw("failed creating k8s client", "error", err)
}
if err := k8s.IsClusterVersionSupported(); err != nil {
logger.Fatalw("unsupported k8s version or connection failure", "error", err)
}
store := app.NewStore(logger, docker, k8s)
err = docker.WatchForImagesChanges(ctx, &app.DockerImagesWatcher{
OnNewImage: func(imageName string, imageTag string) {
logger.Debugw("new docker image", "imageName", imageName, "imageTag", imageTag)
store.NewDockerImage(ctx, imageName)
},
OnRemovedImage: func(imageName string, imageTag string) {
logger.Debugw("removed docker image", "imageName", imageName, "imageTag", imageTag)
store.RemoveDockerImage(imageName)
},
})
if err != nil {
logger.Fatalw("failed watching docker for images changes", "error", err)
}
if err := k8s.RegisterWatchForChanges(config, &app.K8sWatcher{
OnAddDeployment: func(deployment *appsV1.Deployment) {
logger.Debugw("added deployment", "name", deployment.Name, "namespace", deployment.Namespace)
store.NewK8sDeployment(deployment)
},
OnRemoveDeployment: func(deployment *appsV1.Deployment) {
logger.Debugw("removed deployment", "name", deployment.Name, "namespace", deployment.Namespace)
store.RemoveK8sDeployment(deployment)
},
OnAddStatefulSet: func(statefulSet *appsV1.StatefulSet) {
logger.Debugw("added statefulSet", "name", statefulSet.Name, "namespace", statefulSet.Namespace)
store.NewK8sStatefulSet(statefulSet)
},
OnRemoveStatefulSet: func(statefulSet *appsV1.StatefulSet) {
logger.Debugw("removed statefulSet", "name", statefulSet.Name, "namespace", statefulSet.Namespace)
store.RemoveK8sStatefulSet(statefulSet)
},
}); err != nil {
logger.Fatalw("failed registering callbacks for k8s watcher", "error", err)
}
if err := k8s.Run(ctx); err != nil {
logger.Fatalw("failed listening for k8s changes", "error", err)
}
<-ctx.Done()
}