github.com/google/cloudprober@v0.11.3/rds/server/cmd/server.go (about) 1 // This binary implements a stand-alone ResourceDiscovery server. 2 package main 3 4 import ( 5 "context" 6 "io/ioutil" 7 "net" 8 9 "flag" 10 "github.com/golang/glog" 11 "github.com/golang/protobuf/proto" 12 "github.com/google/cloudprober/logger" 13 "github.com/google/cloudprober/rds/server" 14 configpb "github.com/google/cloudprober/rds/server/proto" 15 "google.golang.org/grpc" 16 "google.golang.org/grpc/credentials" 17 ) 18 19 var ( 20 config = flag.String("config_file", "", "Config file (ServerConf)") 21 addr = flag.String("addr", ":0", "Port for the gRPC server") 22 tlsCertFile = flag.String("tls_cert_file", ":0", "Port for the gRPC server") 23 tlsKeyFile = flag.String("tls_key_file", ":0", "Port for the gRPC server") 24 ) 25 26 func main() { 27 flag.Parse() 28 29 c := &configpb.ServerConf{} 30 31 // If we are given a config file, read it. If not, use defaults. 32 if *config != "" { 33 b, err := ioutil.ReadFile(*config) 34 if err != nil { 35 glog.Exit(err) 36 } 37 if err := proto.UnmarshalText(string(b), c); err != nil { 38 glog.Exitf("Error while parsing config protobuf %s: Err: %v", string(b), err) 39 } 40 } 41 42 grpcLn, err := net.Listen("tcp", *addr) 43 if err != nil { 44 glog.Exitf("error while creating listener for default gRPC server: %v", err) 45 } 46 47 // Create a gRPC server for RDS service. 48 var serverOpts []grpc.ServerOption 49 50 if *tlsCertFile != "" { 51 creds, err := credentials.NewServerTLSFromFile(*tlsCertFile, *tlsKeyFile) 52 if err != nil { 53 glog.Exitf("error initializing gRPC server TLS credentials: %v", err) 54 } 55 serverOpts = append(serverOpts, grpc.Creds(creds)) 56 } 57 58 grpcServer := grpc.NewServer(serverOpts...) 59 srv, err := server.New(context.Background(), c, nil, &logger.Logger{}) 60 if err != nil { 61 glog.Exit(err) 62 } 63 srv.RegisterWithGRPC(grpcServer) 64 65 grpcServer.Serve(grpcLn) 66 }