@@ -6,12 +6,15 @@ package driver
66import (
77 "context"
88 "fmt"
9+ "net"
910
1011 "github.com/container-storage-interface/spec/lib/go/csi"
12+ "google.golang.org/grpc"
1113 "k8s.io/klog/v2"
1214
1315 "github.com/leaseweb/cloudstack-csi-driver/pkg/cloud"
1416 "github.com/leaseweb/cloudstack-csi-driver/pkg/mount"
17+ "github.com/leaseweb/cloudstack-csi-driver/pkg/util"
1518)
1619
1720// Interface is the CloudStack CSI driver interface.
@@ -22,7 +25,6 @@ type Interface interface {
2225
2326type cloudstackDriver struct {
2427 controller csi.ControllerServer
25- identity csi.IdentityServer
2628 node csi.NodeServer
2729 options * Options
2830}
@@ -40,7 +42,6 @@ func New(ctx context.Context, csConnector cloud.Interface, options *Options, mou
4042 options : options ,
4143 }
4244
43- driver .identity = NewIdentityServer (driverVersion )
4445 switch options .Mode {
4546 case ControllerMode :
4647 driver .controller = NewControllerServer (csConnector )
@@ -57,7 +58,46 @@ func New(ctx context.Context, csConnector cloud.Interface, options *Options, mou
5758}
5859
5960func (cs * cloudstackDriver ) Run (ctx context.Context ) error {
60- return cs .serve (ctx )
61+ logger := klog .FromContext (ctx )
62+ scheme , addr , err := util .ParseEndpoint (cs .options .Endpoint )
63+ if err != nil {
64+ return err
65+ }
66+
67+ listener , err := net .Listen (scheme , addr )
68+ if err != nil {
69+ return fmt .Errorf ("failed to listen: %w" , err )
70+ }
71+
72+ // Log every request and payloads (request + response)
73+ opts := []grpc.ServerOption {
74+ grpc .UnaryInterceptor (func (ctx context.Context , req interface {}, info * grpc.UnaryServerInfo , handler grpc.UnaryHandler ) (interface {}, error ) {
75+ resp , err := handler (klog .NewContext (ctx , logger ), req )
76+ if err != nil {
77+ logger .Error (err , "GRPC method failed" , "method" , info .FullMethod )
78+ }
79+
80+ return resp , err
81+ }),
82+ }
83+ grpcServer := grpc .NewServer (opts ... )
84+
85+ csi .RegisterIdentityServer (grpcServer , cs )
86+ switch cs .options .Mode {
87+ case ControllerMode :
88+ csi .RegisterControllerServer (grpcServer , cs .controller )
89+ case NodeMode :
90+ csi .RegisterNodeServer (grpcServer , cs .node )
91+ case AllMode :
92+ csi .RegisterControllerServer (grpcServer , cs .controller )
93+ csi .RegisterNodeServer (grpcServer , cs .node )
94+ default :
95+ return fmt .Errorf ("unknown mode: %s" , cs .options .Mode )
96+ }
97+
98+ logger .Info ("Listening for connections" , "address" , listener .Addr ())
99+
100+ return grpcServer .Serve (listener )
61101}
62102
63103func validateMode (mode Mode ) error {
0 commit comments