generated from giantswarm/template-operator
-
Notifications
You must be signed in to change notification settings - Fork 5
/
main.go
127 lines (104 loc) · 4.14 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
package main
import (
"context"
"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/etcd-backup-operator/v4/flag"
"github.com/giantswarm/etcd-backup-operator/v4/pkg/project"
"github.com/giantswarm/etcd-backup-operator/v4/server"
"github.com/giantswarm/etcd-backup-operator/v4/service"
)
var (
f *flag.Flag = flag.New()
)
func main() {
err := mainE(context.Background())
if err != nil {
panic(microerror.JSON(err))
}
}
func mainE(ctx context.Context) error {
var err error
var logger micrologger.Logger
{
c := micrologger.Config{}
logger, err = micrologger.New(c)
if err != nil {
return microerror.Mask(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.
serverFactory := func(v *viper.Viper) microserver.Server {
// Create a new custom service which implements business logic.
var newService *service.Service
{
c := service.Config{
Logger: logger,
Flag: f,
Viper: v,
}
newService, err = service.New(c)
if err != nil {
panic(microerror.JSON(err))
}
go newService.Boot(ctx)
}
// Create a new custom server which bundles our endpoints.
var newServer microserver.Server
{
c := server.Config{
Logger: logger,
Service: newService,
Viper: v,
}
newServer, err = server.New(c)
if err != nil {
panic(microerror.JSON(err))
}
}
return newServer
}
// Create a new microkit command which manages our custom microservice.
var newCommand command.Command
{
c := command.Config{
Logger: logger,
ServerFactory: serverFactory,
Description: project.Description(),
GitCommit: project.GitSHA(),
Name: project.Name(),
Source: project.Source(),
Version: project.Version(),
}
newCommand, err = command.New(c)
if err != nil {
return microerror.Mask(err)
}
}
daemonCommand := newCommand.DaemonCommand().CobraCommand()
daemonCommand.PersistentFlags().String(f.Service.Kubernetes.Address, "http://127.0.0.1:6443", "Address used to connect to Kubernetes. When empty in-cluster config is created.")
daemonCommand.PersistentFlags().Bool(f.Service.Kubernetes.InCluster, false, "Whether to use the in-cluster config to authenticate with Kubernetes.")
daemonCommand.PersistentFlags().String(f.Service.Kubernetes.KubeConfig, "", "KubeConfig used to connect to Kubernetes. When empty other settings are used.")
daemonCommand.PersistentFlags().String(f.Service.Kubernetes.TLS.CAFile, "", "Certificate authority file path to use to authenticate with Kubernetes.")
daemonCommand.PersistentFlags().String(f.Service.Kubernetes.TLS.CrtFile, "", "Certificate file path to use to authenticate with Kubernetes.")
daemonCommand.PersistentFlags().String(f.Service.Kubernetes.TLS.KeyFile, "", "Key file path to use to authenticate with Kubernetes.")
daemonCommand.PersistentFlags().Bool(f.Service.SkipManagementClusterBackup, false, "Skip management cluster backup.")
daemonCommand.PersistentFlags().String(f.Service.S3.Bucket, "", "AWS S3 Bucket name.")
daemonCommand.PersistentFlags().String(f.Service.S3.Region, "", "AWS S3 Region name.")
daemonCommand.PersistentFlags().String(f.Service.ETCDv2.DataDir, "", "ETCD v2 Data Dir path.")
daemonCommand.PersistentFlags().String(f.Service.ETCDv3.Cert, "", "Client certificate for ETCD v3 connection")
daemonCommand.PersistentFlags().String(f.Service.ETCDv3.CaCert, "", "Client CA certificate for ETCD v3 connection")
daemonCommand.PersistentFlags().String(f.Service.ETCDv3.Key, "", "Client private key for ETCD v3 connection")
daemonCommand.PersistentFlags().String(f.Service.ETCDv3.Endpoints, "", "Endpoints for ETCD v3 connection")
daemonCommand.PersistentFlags().String(f.Service.Installation, "", "Name of the installation")
daemonCommand.PersistentFlags().String(f.Service.Sentry.DSN, "", "DSN of the Sentry instance to forward errors to.")
err = newCommand.CobraCommand().Execute()
if err != nil {
return microerror.Mask(err)
}
return nil
}