@@ -115,3 +115,48 @@ func getCIDRS(cidr []string) []*fence.CIDR {
115115 }
116116 return cidrs
117117}
118+
119+ // GetFenceClients fetches required information from kubernetes cluster and calls
120+ // CSI-Addons GetFenceClients service.
121+ func (ns * NetworkFenceServer ) GetFenceClients (
122+ ctx context.Context ,
123+ req * proto.FenceClientsRequest ) (* proto.FenceClientsResponse , error ) {
124+ data := map [string ]string {}
125+ var err error
126+ // Get the secrets from the k8s cluster if secret name or namespace is provided
127+ if req .GetSecretName () != "" || req .GetSecretNamespace () != "" {
128+ data , err = kube .GetSecret (ctx , ns .kubeClient , req .GetSecretName (), req .GetSecretNamespace ())
129+ if err != nil {
130+ klog .Errorf ("Failed to get secret %s in namespace %s: %v" , req .GetSecretName (), req .GetSecretNamespace (), err )
131+ return nil , status .Error (codes .InvalidArgument , err .Error ())
132+ }
133+ }
134+
135+ getFenceClientRequest := fence.GetFenceClientsRequest {
136+ Parameters : req .GetParameters (),
137+ Secrets : data ,
138+ }
139+
140+ resp , err := ns .controllerClient .GetFenceClients (ctx , & getFenceClientRequest )
141+ if err != nil {
142+ klog .Errorf ("Failed to get fence clients: %v" , err )
143+ return nil , err
144+ }
145+ response := & proto.FenceClientsResponse {}
146+ for _ , client := range resp .Clients {
147+ response .Clients = append (response .Clients , & proto.ClientDetails {
148+ Id : client .Id ,
149+ Cidrs : cidrsFromFenceCIDR (client .Addresses ),
150+ })
151+ }
152+
153+ return response , nil
154+ }
155+
156+ func cidrsFromFenceCIDR (cidr []* fence.CIDR ) []string {
157+ cidrs := []string {}
158+ for _ , c := range cidr {
159+ cidrs = append (cidrs , c .Cidr )
160+ }
161+ return cidrs
162+ }
0 commit comments