package driver import ( "fmt" "strings" "github.com/container-storage-interface/spec/lib/go/csi" "github.com/golang/glog" "github.com/kubernetes-csi/csi-lib-utils/protosanitizer" "golang.org/x/net/context" "google.golang.org/grpc" ) func NewNodeServer(d *driver) *NodeServer { return &NodeServer{ Driver: d, } } func NewDefaultIdentityServer(d *driver) *IdentityServer { return &IdentityServer{ Driver: d, } } func NewControllerServer(d *driver) *ControllerServer { return &ControllerServer{ Driver: d, } } func NewControllerServiceCapability(cap csi.ControllerServiceCapability_RPC_Type) *csi.ControllerServiceCapability { return &csi.ControllerServiceCapability{ Type: &csi.ControllerServiceCapability_Rpc{ Rpc: &csi.ControllerServiceCapability_RPC{ Type: cap, }, }, } } func ParseEndpoint(ep string) (string, string, error) { if strings.HasPrefix(strings.ToLower(ep), "unix://") || strings.HasPrefix(strings.ToLower(ep), "tcp://") { s := strings.SplitN(ep, "://", 2) if s[1] != "" { return s[0], s[1], nil } } return "", "", fmt.Errorf("Invalid endpoint: %v", ep) } func logGRPC(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { glog.V(3).Infof("GRPC call: %s", info.FullMethod) glog.V(5).Infof("GRPC request: %s", protosanitizer.StripSecrets(req)) resp, err := handler(ctx, req) if err != nil { glog.Errorf("GRPC error: %v", err) } else { glog.V(5).Infof("GRPC response: %s", protosanitizer.StripSecrets(resp)) } return resp, err }