This repository has been archived by the owner on Dec 14, 2023. It is now read-only.
/
node_service.go
80 lines (66 loc) · 2.26 KB
/
node_service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package services
import (
"context"
"fmt"
"sync"
"github.com/container-storage-interface/spec/lib/go/csi"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"k8s.io/klog/v2"
)
type NodeService struct {
csi.UnimplementedNodeServer
mtx sync.RWMutex // Need to handle concurrent system calls
capabilities []csi.NodeServiceCapability_RPC_Type
nodeId string
topologies *csi.Topology
}
func NewNodeService(name string, nodeId string) csi.NodeServer {
topologyKey := fmt.Sprintf("topology.%s/node", name)
return &NodeService{
nodeId: nodeId,
capabilities: []csi.NodeServiceCapability_RPC_Type{
csi.NodeServiceCapability_RPC_UNKNOWN,
},
topologies: &csi.Topology{
Segments: map[string]string{
topologyKey: nodeId,
},
},
}
}
func (n *NodeService) NodeGetInfo(ctx context.Context, req *csi.NodeGetInfoRequest) (*csi.NodeGetInfoResponse, error) {
klog.V(2).Infof("received %#v", *req)
return &csi.NodeGetInfoResponse{
NodeId: n.nodeId,
AccessibleTopology: n.topologies,
}, nil
}
func (n *NodeService) NodeGetCapabilities(ctx context.Context, req *csi.NodeGetCapabilitiesRequest) (*csi.NodeGetCapabilitiesResponse, error) {
klog.V(2).Infof("received %#v", req)
csiCapabilities := make([]*csi.NodeServiceCapability, 0, len(n.capabilities))
for _, cap := range n.capabilities {
csiCapabilities = append(csiCapabilities, &csi.NodeServiceCapability{
Type: &csi.NodeServiceCapability_Rpc{
Rpc: &csi.NodeServiceCapability_RPC{
Type: cap,
},
},
})
}
return &csi.NodeGetCapabilitiesResponse{
Capabilities: csiCapabilities,
}, nil
}
func (n *NodeService) NodePublishVolume(ctx context.Context, req *csi.NodePublishVolumeRequest) (*csi.NodePublishVolumeResponse, error) {
klog.V(2).Infof("received NodePublishVolumeRequest: %v", req)
n.mtx.Lock()
defer n.mtx.Unlock()
return nil, status.Error(codes.Unimplemented, "NodePublishVolume is not yet implemented")
}
func (n *NodeService) NodeUnpublishVolume(ctx context.Context, req *csi.NodeUnpublishVolumeRequest) (*csi.NodeUnpublishVolumeResponse, error) {
klog.V(2).Infof("received NodeUnpublishVolumeRequest: %v", req)
n.mtx.Lock()
defer n.mtx.Unlock()
return nil, status.Error(codes.Unimplemented, "NodeUnpublishVolume is not yet implemented")
}