Skip to content

Commit facf805

Browse files
Madhu-1mergify[bot]
authored andcommitted
rbd: implement GetFenceClients
implemented GetFenceClients which connects to the ceph cluster and returns the ceph clusterID and the clientaddress that is used for rados connection. Signed-off-by: Madhu Rajanna <[email protected]>
1 parent ba8c5a3 commit facf805

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

internal/csi-addons/rbd/network_fence.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,59 @@ func (fcs *FenceControllerServer) UnfenceClusterNetwork(
114114

115115
return &fence.UnfenceClusterNetworkResponse{}, nil
116116
}
117+
118+
// GetFenceClients fetches the ceph cluster ID and the client address that need to be fenced.
119+
func (fcs *FenceControllerServer) GetFenceClients(
120+
ctx context.Context,
121+
req *fence.GetFenceClientsRequest,
122+
) (*fence.GetFenceClientsResponse, error) {
123+
options := req.GetParameters()
124+
clusterID, err := util.GetClusterID(options)
125+
if err != nil {
126+
return nil, status.Error(codes.InvalidArgument, err.Error())
127+
}
128+
129+
cr, err := util.NewUserCredentials(req.GetSecrets())
130+
if err != nil {
131+
return nil, status.Error(codes.InvalidArgument, err.Error())
132+
}
133+
defer cr.DeleteCredentials()
134+
135+
monitors, _ /* clusterID*/, err := util.GetMonsAndClusterID(ctx, clusterID, false)
136+
if err != nil {
137+
return nil, status.Error(codes.Internal, err.Error())
138+
}
139+
140+
// Get the cluster ID of the ceph cluster.
141+
conn := &util.ClusterConnection{}
142+
err = conn.Connect(monitors, cr)
143+
if err != nil {
144+
return nil, status.Errorf(codes.Internal, "failed to connect to MONs %q: %s", monitors, err)
145+
}
146+
defer conn.Destroy()
147+
148+
fsID, err := conn.GetFSID()
149+
if err != nil {
150+
return nil, status.Errorf(codes.Internal, "failed to get cephfs id: %s", err)
151+
}
152+
153+
address, err := conn.GetAddrs()
154+
if err != nil {
155+
return nil, status.Errorf(codes.Internal, "failed to get client address: %s", err)
156+
}
157+
158+
resp := &fence.GetFenceClientsResponse{
159+
Clients: []*fence.ClientDetails{
160+
{
161+
Id: fsID,
162+
Addresses: []*fence.CIDR{
163+
{
164+
Cidr: address,
165+
},
166+
},
167+
},
168+
},
169+
}
170+
171+
return resp, nil
172+
}

0 commit comments

Comments
 (0)