4749506095dffed7a3fa09780c16264a5d5de6d3
[ovn4nfv-k8s-plugin.git] / cmd / nfn-operator / nfn-operator.go
1 package main
2
3 import (
4         "flag"
5         "fmt"
6         "os"
7         "runtime"
8
9         // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
10         _ "k8s.io/client-go/plugin/pkg/client/auth"
11
12         "github.com/spf13/pflag"
13         "ovn4nfv-k8s-plugin/pkg/apis"
14         "ovn4nfv-k8s-plugin/internal/pkg/ovn"
15         "ovn4nfv-k8s-plugin/pkg/controller"
16         "sigs.k8s.io/controller-runtime/pkg/client/config"
17         "sigs.k8s.io/controller-runtime/pkg/log/zap"
18         "sigs.k8s.io/controller-runtime/pkg/manager"
19         logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
20         "sigs.k8s.io/controller-runtime/pkg/runtime/signals"
21 )
22
23 var log = logf.Log.WithName("nfn-operator")
24
25 func printVersion() {
26         log.Info(fmt.Sprintf("Go Version: %s", runtime.Version()))
27         log.Info(fmt.Sprintf("Go OS/Arch: %s/%s", runtime.GOOS, runtime.GOARCH))
28 }
29
30 func main() {
31
32         // Add flags registered by imported packages (e.g. glog and
33         // controller-runtime)
34         pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
35
36         pflag.Parse()
37
38         // Use a zap logr.Logger implementation. If none of the zap
39         // flags are configured (or if the zap flag set is not being
40         // used), this defaults to a production zap logger.
41         //
42         // The logger instantiated here can be changed to any logger
43         // implementing the logr.Logger interface. This logger will
44         // be propagated through the whole operator, generating
45         // uniform and structured logs.
46         logf.SetLogger(zap.Logger(true))
47
48         printVersion()
49
50         // Create an OVN Controller
51     _, err := ovn.NewOvnController(nil)
52     if err != nil {
53                 log.Error(err, "")
54                 os.Exit(1)
55         }
56         //Initialize all the controllers that are supported here
57
58         // Get a config to talk to the apiserver
59         cfg, err := config.GetConfig()
60         if err != nil {
61                 log.Error(err, "")
62                 os.Exit(1)
63         }
64         // Create a new Cmd to provide shared dependencies and start components
65         mgr, err := manager.New(cfg, manager.Options{})
66         if err != nil {
67                 log.Error(err, "")
68                 os.Exit(1)
69         }
70
71         log.Info("Registering Components.")
72
73         // Setup Scheme for all resources
74         if err := apis.AddToScheme(mgr.GetScheme()); err != nil {
75                 log.Error(err, "")
76                 os.Exit(1)
77         }
78
79         // Setup all Controllers
80         if err := controller.AddToManager(mgr); err != nil {
81                 log.Error(err, "")
82                 os.Exit(1)
83         }
84         log.Info("Starting the Cmd.")
85
86         // Start the Cmd
87         if err := mgr.Start(signals.SetupSignalHandler()); err != nil {
88                 log.Error(err, "Manager exited non-zero")
89                 os.Exit(1)
90         }
91 }