This repository has been archived by the owner on Dec 11, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
main.go
132 lines (110 loc) · 3.29 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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package main
import (
"fmt"
"os"
"github.com/giantswarm/microerror"
"github.com/giantswarm/microkit/command"
microserver "github.com/giantswarm/microkit/server"
"github.com/giantswarm/micrologger"
"github.com/spf13/viper"
"github.com/giantswarm/k8s-kvm-health/flag"
"github.com/giantswarm/k8s-kvm-health/server"
"github.com/giantswarm/k8s-kvm-health/service"
)
var (
f *flag.Flag = flag.New()
description string = "k8s-kvm-health serves as health endpoint for k8s-kvm pod created by kvm-operator."
gitCommit string = "n/a"
name string = "k8s-kvm-health"
source string = "https://github.com/giantswarm/k8s-kvm-health"
)
func main() {
err := mainWithError()
if err != nil {
panic(fmt.Sprintf("%#v\n", microerror.Mask(err)))
}
}
func readEnv() error {
// load conf from ENV
f.Service.FlannelFile = os.Getenv("NETWORK_ENV_FILE_PATH")
f.Service.ListenAddress = os.Getenv("LISTEN_ADDRESS")
f.Service.CheckAPI = os.Getenv("CHECK_K8S_API")
if f.Service.FlannelFile == "" {
return microerror.Maskf(invalidConfigError, "NETWORK_ENV_FILE_PATH must not be empty")
}
if f.Service.ListenAddress == "" {
return microerror.Maskf(invalidConfigError, "LISTEN_ADDRESS must not be empty")
}
return nil
}
func mainWithError() error {
var err error
// Create a new logger which is used by all packages.
var newLogger micrologger.Logger
{
loggerConfig := micrologger.Config{}
loggerConfig.IOWriter = os.Stdout
newLogger, err = micrologger.New(loggerConfig)
if err != nil {
return err
}
}
// We define a server factory to create the custom server once all command
// line flags are parsed and all microservice configuration is storted out.
newServerFactory := func(v *viper.Viper) microserver.Server {
err = readEnv()
if err != nil {
panic(err)
}
// Create a new custom service which implements business logic.
var newService *service.Service
{
serviceConfig := service.DefaultConfig()
serviceConfig.Flag = f
serviceConfig.Logger = newLogger
serviceConfig.Description = description
serviceConfig.GitCommit = gitCommit
serviceConfig.Name = name
serviceConfig.Source = source
newService, err = service.New(serviceConfig)
if err != nil {
panic(err)
}
}
// Create a new custom server which bundles our endpoints.
var newServer microserver.Server
{
serverConfig := server.DefaultConfig()
serverConfig.MicroServerConfig.Logger = newLogger
serverConfig.MicroServerConfig.ServiceName = name
serverConfig.MicroServerConfig.Viper = v
serverConfig.MicroServerConfig.ListenAddress = f.Service.ListenAddress
serverConfig.Service = newService
newServer, err = server.New(serverConfig)
if err != nil {
panic(err)
}
}
return newServer
}
// Create a new microkit command which manages our custom microservice.
var newCommand command.Command
{
commandConfig := command.Config{}
commandConfig.Logger = newLogger
commandConfig.ServerFactory = newServerFactory
commandConfig.Description = description
commandConfig.GitCommit = gitCommit
commandConfig.Name = name
commandConfig.Source = source
newCommand, err = command.New(commandConfig)
if err != nil {
return microerror.Mask(err)
}
}
err = newCommand.CobraCommand().Execute()
if err != nil {
panic(err)
}
return nil
}