aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Multanen <eric.w.multanen@intel.com>2020-04-23 12:48:55 -0700
committerEric Multanen <eric.w.multanen@intel.com>2020-05-13 12:17:36 -0700
commita08968c161b999238cbd61ea2eb9fd597a5b37e6 (patch)
tree7a9a62b071a6aea583f69c44e283ed8502f45b01
parentbd3e69e7a26aaa00d3367f1eeb78e91e63ebd404 (diff)
Add gRPC servers to ncm service
Add a contextupdate grpc server to the ncm service. Issue-ID: MULTICLOUD-1029 Signed-off-by: Eric Multanen <eric.w.multanen@intel.com> Change-Id: I38caa625c028baac06a6202f03b86d0f2bf38126
-rw-r--r--src/ncm/cmd/main.go59
-rw-r--r--src/ncm/go.mod1
-rw-r--r--src/ncm/pkg/grpc/contextupdateserver/contextupdateserver.go45
-rw-r--r--src/ncm/pkg/grpc/register.go58
4 files changed, 162 insertions, 1 deletions
diff --git a/src/ncm/cmd/main.go b/src/ncm/cmd/main.go
index c4ae423f..49af81ee 100644
--- a/src/ncm/cmd/main.go
+++ b/src/ncm/cmd/main.go
@@ -15,23 +15,73 @@ package main
import (
"context"
+ "fmt"
"log"
"math/rand"
+ "net"
"net/http"
"os"
"os/signal"
+ "strings"
"time"
"github.com/gorilla/handlers"
"github.com/onap/multicloud-k8s/src/ncm/api"
+ register "github.com/onap/multicloud-k8s/src/ncm/pkg/grpc"
+ "github.com/onap/multicloud-k8s/src/ncm/pkg/grpc/contextupdateserver"
+ updatepb "github.com/onap/multicloud-k8s/src/orchestrator/pkg/grpc/contextupdate"
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/auth"
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/config"
contextDb "github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/contextdb"
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/db"
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/credentials"
+ "google.golang.org/grpc/testdata"
)
-func main() {
+func startGrpcServer() error {
+ var tls bool
+
+ if strings.Contains(config.GetConfiguration().GrpcEnableTLS, "enable") {
+ tls = true
+ } else {
+ tls = false
+ }
+ certFile := config.GetConfiguration().GrpcServerCert
+ keyFile := config.GetConfiguration().GrpcServerKey
+
+ host, port := register.GetServerHostPort()
+
+ lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", host, port))
+ if err != nil {
+ log.Fatalf("Could not listen to port: %v", err)
+ }
+ var opts []grpc.ServerOption
+ if tls {
+ if certFile == "" {
+ certFile = testdata.Path("server.pem")
+ }
+ if keyFile == "" {
+ keyFile = testdata.Path("server.key")
+ }
+ creds, err := credentials.NewServerTLSFromFile(certFile, keyFile)
+ if err != nil {
+ log.Fatalf("Could not generate credentials %v", err)
+ }
+ opts = []grpc.ServerOption{grpc.Creds(creds)}
+ }
+ grpcServer := grpc.NewServer(opts...)
+ updatepb.RegisterContextupdateServer(grpcServer, contextupdateserver.NewContextupdateServer())
+ log.Println("Starting Network Configuration Manager gRPC Server")
+ err = grpcServer.Serve(lis)
+ if err != nil {
+ log.Fatalf("ncm grpc server is not serving %v", err)
+ }
+ return err
+}
+
+func main() {
rand.Seed(time.Now().UnixNano())
err := db.InitializeDatabaseConnection("mco")
@@ -56,6 +106,13 @@ func main() {
Addr: ":" + config.GetConfiguration().ServicePort,
}
+ go func() {
+ err := startGrpcServer()
+ if err != nil {
+ log.Fatalf("GRPC server failed to start")
+ }
+ }()
+
connectionsClose := make(chan struct{})
go func() {
c := make(chan os.Signal, 1)
diff --git a/src/ncm/go.mod b/src/ncm/go.mod
index 8b45298f..19f83bdf 100644
--- a/src/ncm/go.mod
+++ b/src/ncm/go.mod
@@ -13,6 +13,7 @@ require (
go.etcd.io/etcd v3.3.12+incompatible
go.mongodb.org/mongo-driver v1.0.0
golang.org/x/net v0.0.0-20190930134127-c5a3c61f89f3
+ google.golang.org/grpc v1.27.1
gopkg.in/yaml.v2 v2.2.8
k8s.io/api v0.0.0-20190831074750-7364b6bdad65
k8s.io/apimachinery v0.0.0-20190831074630-461753078381
diff --git a/src/ncm/pkg/grpc/contextupdateserver/contextupdateserver.go b/src/ncm/pkg/grpc/contextupdateserver/contextupdateserver.go
new file mode 100644
index 00000000..fc548ccc
--- /dev/null
+++ b/src/ncm/pkg/grpc/contextupdateserver/contextupdateserver.go
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Intel Corporation.
+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 contextupdateserver
+
+import (
+ "context"
+ "encoding/json"
+ "log"
+
+ contextpb "github.com/onap/multicloud-k8s/src/orchestrator/pkg/grpc/contextupdate"
+ //"google.golang.org/grpc/codes"
+ //"google.golang.org/grpc/status"
+)
+
+type contextupdateServer struct {
+ contextpb.UnimplementedContextupdateServer
+}
+
+func (cs *contextupdateServer) UpdateAppContext(ctx context.Context, req *contextpb.ContextUpdateRequest) (*contextpb.ContextUpdateResponse, error) {
+ contextUpdateReq, _ := json.Marshal(req)
+ log.Println("GRPC Server received contextupdateRequest: ", string(contextUpdateReq))
+
+ // Insert call to Server Functionality here
+ //
+ //
+
+ return &contextpb.ContextUpdateResponse{AppContextUpdated: true}, nil
+}
+
+// NewContextUpdateServer exported
+func NewContextupdateServer() *contextupdateServer {
+ s := &contextupdateServer{}
+ return s
+}
diff --git a/src/ncm/pkg/grpc/register.go b/src/ncm/pkg/grpc/register.go
new file mode 100644
index 00000000..07d8f5c0
--- /dev/null
+++ b/src/ncm/pkg/grpc/register.go
@@ -0,0 +1,58 @@
+/*
+Copyright 2020 Intel Corporation.
+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 grpc
+
+import (
+ "os"
+ "strconv"
+ "strings"
+
+ log "github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/logutils"
+)
+
+const default_host = "localhost"
+const default_port = 9030
+const default_ncm_name = "ncm"
+const ENV_NCM_NAME = "NCM_NAME"
+
+func GetServerHostPort() (string, int) {
+
+ // expect name of this ncm program to be in env variable "NCM_NAME" - e.g. NCM_NAME="ncm"
+ serviceName := os.Getenv(ENV_NCM_NAME)
+ if serviceName == "" {
+ serviceName = default_ncm_name
+ log.Info("Using default name for NCM service name", log.Fields{
+ "Name": serviceName,
+ })
+ }
+
+ // expect service name to be in env variable - e.g. NCM_SERVICE_HOST
+ host := os.Getenv(strings.ToUpper(serviceName) + "_SERVICE_HOST")
+ if host == "" {
+ host = default_host
+ log.Info("Using default host for ncm gRPC controller", log.Fields{
+ "Host": host,
+ })
+ }
+
+ // expect service port to be in env variable - e.g. NCM_SERVICE_PORT
+ port, err := strconv.Atoi(os.Getenv(strings.ToUpper(serviceName) + "_SERVICE_PORT"))
+ if err != nil || port < 0 {
+ port = default_port
+ log.Info("Using default port for ncm gRPC controller", log.Fields{
+ "Port": port,
+ })
+ }
+ return host, port
+}