...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package sparrow
18
19 import (
20 "errors"
21 "fmt"
22 "path/filepath"
23
24 "github.com/go-logr/logr"
25 "k8s.io/apimachinery/pkg/runtime"
26 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
27 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
28 "k8s.io/client-go/rest"
29 "k8s.io/client-go/tools/clientcmd"
30 "k8s.io/client-go/util/homedir"
31 "sigs.k8s.io/controller-runtime/pkg/client"
32 )
33
34
35
36 func Run(log logr.Logger) error {
37 cfg, err := NewConfig()
38 if err != nil {
39 return fmt.Errorf("failed to load config: %w", err)
40 }
41
42 config, err := rest.InClusterConfig()
43 if errors.Is(err, rest.ErrNotInCluster) {
44 config, err = clientcmd.BuildConfigFromFlags("", filepath.Join(homedir.HomeDir(), ".kube", "config"))
45 if err != nil {
46 return fmt.Errorf("failed to get local config: %w", err)
47 }
48 } else if err != nil {
49 return fmt.Errorf("failed to get in-cluster config: %w", err)
50 }
51
52 cl, err := client.New(config, client.Options{Scheme: createScheme()})
53 if err != nil {
54 return fmt.Errorf("failed to create client: %w", err)
55 }
56
57 server := NewEncryptionServer(cfg, cl, log)
58
59 return server.Start(fmt.Sprintf(":%s", cfg.Port), fmt.Sprintf(":%s", cfg.MetricPort))
60 }
61
62 func createScheme() *runtime.Scheme {
63 scheme := runtime.NewScheme()
64
65 utilruntime.Must(clientgoscheme.AddToScheme(scheme))
66 return scheme
67 }
68
View as plain text