[VOL-3678] First implementation of the BBSim-sadis-server
Change-Id: I5077a8f861f4cc6af9759f31a4a415042c05eba3
diff --git a/cmd/bbsim-sadis-server.go b/cmd/bbsim-sadis-server.go
new file mode 100644
index 0000000..e18d880
--- /dev/null
+++ b/cmd/bbsim-sadis-server.go
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package main
+
+import (
+ "context"
+ "github.com/opencord/bbsim-sadis-server/internal/core"
+ "github.com/opencord/bbsim-sadis-server/internal/utils"
+ "github.com/opencord/voltha-lib-go/v4/pkg/log"
+ "k8s.io/client-go/kubernetes"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/tools/clientcmd"
+ "sync"
+)
+
+var (
+ logger log.CLogger
+ cf *utils.ConfigFlags
+)
+
+func init() {
+ ctx := context.Background()
+
+ cf = utils.NewConfigFlags()
+ cf.ParseCommandArguments()
+
+ // Setup this package so that it's log level can be modified at run time
+ var err error
+ logger, err = log.RegisterPackage(cf.LogFormat, log.ErrorLevel, log.Fields{})
+ if err != nil {
+ panic(err)
+ }
+
+ // Set the instance ID as the hostname
+ instanceID := utils.GetHostName()
+
+ logLevel, err := log.StringToLogLevel(cf.LogLevel)
+
+ if err != nil {
+ logger.Errorw(ctx, "provided-log-level-is-not-valid", log.Fields{"err": err, "providedLevel": cf.LogLevel})
+ }
+
+ //Setup default logger - applies for packages that do not have specific logger set
+ if _, err := log.SetDefaultLogger(cf.LogFormat, logLevel, log.Fields{"instanceId": instanceID}); err != nil {
+ logger.With(log.Fields{"error": err}).Fatal(ctx, "Cannot setup logging")
+ }
+
+ // Update all loggers (provisioned via init) with a common field
+ if err := log.UpdateAllLoggers(log.Fields{"instanceId": instanceID}); err != nil {
+ logger.With(log.Fields{"error": err}).Fatal(ctx, "Cannot setup logging")
+ }
+
+ // Update all loggers to log level specified as input parameter
+ log.SetAllLogLevel(logLevel)
+
+ core.SetupLogger(logLevel, cf.LogFormat)
+}
+
+func main() {
+ ctx := context.Background()
+ logger.Info(ctx, "bbsim-sadis-server-started")
+
+ var config *rest.Config
+ var err error
+
+ // if kubeconfig is provided use that, otherwise assume we're running within the cluster
+ if cf.Kubeconfig != "" {
+ config, err = clientcmd.BuildConfigFromFlags("", cf.Kubeconfig)
+ } else {
+ config, err = rest.InClusterConfig()
+ }
+ if err != nil {
+ panic(err.Error())
+ }
+
+ clientset, err := kubernetes.NewForConfig(config)
+ if err != nil {
+ panic(err.Error())
+ }
+
+ store := core.NewStore()
+
+ watcher := core.NewWatcher(clientset, store, cf)
+ server := core.NewServer(store)
+
+ wg := sync.WaitGroup{}
+
+ wg.Add(2)
+
+ go watcher.Watch(ctx, &wg)
+ go server.StartSadisServer(&wg)
+
+ wg.Wait()
+}