mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-24 23:30:20 +00:00
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 <madhupr007@gmail.com>
This commit is contained in:
parent
ba8c5a359c
commit
facf805941
@ -114,3 +114,59 @@ func (fcs *FenceControllerServer) UnfenceClusterNetwork(
|
|||||||
|
|
||||||
return &fence.UnfenceClusterNetworkResponse{}, nil
|
return &fence.UnfenceClusterNetworkResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetFenceClients fetches the ceph cluster ID and the client address that need to be fenced.
|
||||||
|
func (fcs *FenceControllerServer) GetFenceClients(
|
||||||
|
ctx context.Context,
|
||||||
|
req *fence.GetFenceClientsRequest,
|
||||||
|
) (*fence.GetFenceClientsResponse, error) {
|
||||||
|
options := req.GetParameters()
|
||||||
|
clusterID, err := util.GetClusterID(options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, status.Error(codes.InvalidArgument, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
cr, err := util.NewUserCredentials(req.GetSecrets())
|
||||||
|
if err != nil {
|
||||||
|
return nil, status.Error(codes.InvalidArgument, err.Error())
|
||||||
|
}
|
||||||
|
defer cr.DeleteCredentials()
|
||||||
|
|
||||||
|
monitors, _ /* clusterID*/, err := util.GetMonsAndClusterID(ctx, clusterID, false)
|
||||||
|
if err != nil {
|
||||||
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the cluster ID of the ceph cluster.
|
||||||
|
conn := &util.ClusterConnection{}
|
||||||
|
err = conn.Connect(monitors, cr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, status.Errorf(codes.Internal, "failed to connect to MONs %q: %s", monitors, err)
|
||||||
|
}
|
||||||
|
defer conn.Destroy()
|
||||||
|
|
||||||
|
fsID, err := conn.GetFSID()
|
||||||
|
if err != nil {
|
||||||
|
return nil, status.Errorf(codes.Internal, "failed to get cephfs id: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
address, err := conn.GetAddrs()
|
||||||
|
if err != nil {
|
||||||
|
return nil, status.Errorf(codes.Internal, "failed to get client address: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := &fence.GetFenceClientsResponse{
|
||||||
|
Clients: []*fence.ClientDetails{
|
||||||
|
{
|
||||||
|
Id: fsID,
|
||||||
|
Addresses: []*fence.CIDR{
|
||||||
|
{
|
||||||
|
Cidr: address,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user