From ee5748eca6350222051125b5e2313f78da00efbe Mon Sep 17 00:00:00 2001 From: Ritu Sood Date: Tue, 3 Mar 2020 00:44:52 -0800 Subject: Adding function to Query cluster based on label Add Query endpoint and implements returning list of clusters with label. Issue-ID: MULTICLOUD-922 Signed-off-by: Ritu Sood Signed-off-by: Eric Multanen Change-Id: I879b5e9002a0cbc9191abb99f1e164ee2b1c6581 --- src/ncm/api/api.go | 1 + src/ncm/api/clusterhandler.go | 17 +++++++++++++++++ src/ncm/api/clusterhandler_test.go | 9 +++++++++ 3 files changed, 27 insertions(+) (limited to 'src/ncm/api') diff --git a/src/ncm/api/api.go b/src/ncm/api/api.go index 34b46c67..3ff8671a 100644 --- a/src/ncm/api/api.go +++ b/src/ncm/api/api.go @@ -74,6 +74,7 @@ func NewRouter(testClient interface{}) *mux.Router { router.HandleFunc("/cluster-providers/{name}", clusterHandler.deleteClusterProviderHandler).Methods("DELETE") router.HandleFunc("/cluster-providers/{provider-name}/clusters", clusterHandler.createClusterHandler).Methods("POST") router.HandleFunc("/cluster-providers/{provider-name}/clusters", clusterHandler.getClusterHandler).Methods("GET") + router.HandleFunc("/cluster-providers/{provider-name}/clusters", clusterHandler.getClusterHandler).Queries("label", "{label}") router.HandleFunc("/cluster-providers/{provider-name}/clusters/{name}", clusterHandler.getClusterHandler).Methods("GET") router.HandleFunc("/cluster-providers/{provider-name}/clusters/{name}", clusterHandler.deleteClusterHandler).Methods("DELETE") router.HandleFunc("/cluster-providers/{provider-name}/clusters/{cluster-name}/labels", clusterHandler.createClusterLabelHandler).Methods("POST") diff --git a/src/ncm/api/clusterhandler.go b/src/ncm/api/clusterhandler.go index cb147a8a..8c50f720 100644 --- a/src/ncm/api/clusterhandler.go +++ b/src/ncm/api/clusterhandler.go @@ -194,6 +194,23 @@ func (h clusterHandler) getClusterHandler(w http.ResponseWriter, r *http.Request provider := vars["provider-name"] name := vars["name"] + label := r.URL.Query().Get("label") + if len(label) != 0 { + ret, err := h.client.GetClustersWithLabel(provider, label) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + err = json.NewEncoder(w).Encode(ret) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + return + } + // handle the get all clusters case - return a list of only the json parts if len(name) == 0 { var retList []moduleLib.Cluster diff --git a/src/ncm/api/clusterhandler_test.go b/src/ncm/api/clusterhandler_test.go index af5bd160..a26c41bd 100644 --- a/src/ncm/api/clusterhandler_test.go +++ b/src/ncm/api/clusterhandler_test.go @@ -43,6 +43,7 @@ type mockClusterManager struct { ClusterContentItems []moduleLib.ClusterContent ClusterLabelItems []moduleLib.ClusterLabel ClusterKvPairsItems []moduleLib.ClusterKvPairs + ClusterList []string Err error } @@ -106,6 +107,14 @@ func (m *mockClusterManager) GetClusters(provider string) ([]moduleLib.Cluster, return m.ClusterItems, nil } +func (m *mockClusterManager) GetClustersWithLabel(provider, label string) ([]string, error) { + if m.Err != nil { + return []string{}, m.Err + } + + return m.ClusterList, nil +} + func (m *mockClusterManager) DeleteCluster(provider, name string) error { return m.Err } -- cgit 1.2.3-korg