diff options
author | Rajamohan Raj <rajamohan.raj@intel.com> | 2020-04-09 16:54:55 +0000 |
---|---|---|
committer | Rajamohan Raj <rajamohan.raj@intel.com> | 2020-04-09 17:05:32 +0000 |
commit | f65daf54a4ab24be9e2c82236a511cedc3bdf230 (patch) | |
tree | 293d16c3e15904a3f7474769c8ced4acbb7222fc /src/orchestrator/api | |
parent | 1e240a189cfc4a02d9072241fdf30adbc8c1539b (diff) |
Adding query APIs for AppIntents
In this patch the following tasks where performed:
1. Added APIs for query Intents for each App
in the compositeApp. For example, you can see all
intents of collectd or prometheus seperately if
both formed a compositeApp Collection.
2. Added 'provider-name' parameter to denote the cluster
objects used in all intents. Earlier we had only
clusterName and clusterlabel to denote a cluster.
Modified the tests also for this.
3. Fixed bugs in the plugin_collection_v2.sh.
4. Fixed some minor logging and formatting bugs.
Issue-ID: MULTICLOUD-1048
Signed-off-by: Rajamohan Raj <rajamohan.raj@intel.com>
Change-Id: Ic452d7ba5d98bb265eb301de84d679d1abe0e34e
Diffstat (limited to 'src/orchestrator/api')
-rw-r--r-- | src/orchestrator/api/api.go | 3 | ||||
-rw-r--r-- | src/orchestrator/api/app_intent_handler.go | 76 | ||||
-rw-r--r-- | src/orchestrator/api/app_profilehandler.go | 8 |
3 files changed, 80 insertions, 7 deletions
diff --git a/src/orchestrator/api/api.go b/src/orchestrator/api/api.go index 1d38f106..d2673328 100644 --- a/src/orchestrator/api/api.go +++ b/src/orchestrator/api/api.go @@ -136,8 +136,9 @@ func NewRouter(projectClient moduleLib.ProjectManager, router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}/app-intents", appIntentHandler.createAppIntentHandler).Methods("POST") router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}/app-intents/{app-intent-name}", appIntentHandler.getAppIntentHandler).Methods("GET") + router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}/app-intents", appIntentHandler.getAllAppIntentsHandler).Methods("GET") + router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}/app-intents/", appIntentHandler.getAllIntentsByAppHandler).Queries("app-name", "{app-name}") router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}/app-intents/{app-intent-name}", appIntentHandler.deleteAppIntentHandler).Methods("DELETE") - //setting routes for deploymentIntentGroup if deploymentIntentGrpClient == nil { deploymentIntentGrpClient = moduleClient.DeploymentIntentGroup diff --git a/src/orchestrator/api/app_intent_handler.go b/src/orchestrator/api/app_intent_handler.go index ab510c8e..4b3282ef 100644 --- a/src/orchestrator/api/app_intent_handler.go +++ b/src/orchestrator/api/app_intent_handler.go @@ -18,10 +18,12 @@ package api import ( "encoding/json" - "github.com/gorilla/mux" - moduleLib "github.com/onap/multicloud-k8s/src/orchestrator/pkg/module" "io" "net/http" + + "github.com/gorilla/mux" + "github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/validation" + moduleLib "github.com/onap/multicloud-k8s/src/orchestrator/pkg/module" ) /* Used to store backend implementation objects @@ -120,6 +122,76 @@ func (h appIntentHandler) getAppIntentHandler(w http.ResponseWriter, r *http.Req } +/* +getAllIntentsByAppHandler handles the URL: +/v2/project/{project-name}/composite-apps/{composite-app-name}/{version}/generic-placement-intent/{intent-name}/app-intents?app-name=<app-name> +*/ +func (h appIntentHandler) getAllIntentsByAppHandler(w http.ResponseWriter, r *http.Request) { + + vars := mux.Vars(r) + pList := []string{"project-name", "composite-app-name", "composite-app-version", "intent-name"} + err := validation.IsValidParameterPresent(vars, pList) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + } + p := vars["project-name"] + ca := vars["composite-app-name"] + v := vars["composite-app-version"] + i := vars["intent-name"] + aN := r.URL.Query().Get("app-name") + if aN == "" { + http.Error(w, "Missing appName in GET request", http.StatusBadRequest) + return + } + + specData, err := h.client.GetAllIntentsByApp(aN, p, ca, v, i) + 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(specData) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + return + +} + +/* getAllAppIntentsHandler handles the URL: +/v2/project/{project-name}/composite-apps/{composite-app-name}/{version}/generic-placement-intent/{intent-name}/app-intents +*/ +func (h appIntentHandler) getAllAppIntentsHandler(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + pList := []string{"project-name", "composite-app-name", "composite-app-version", "intent-name"} + err := validation.IsValidParameterPresent(vars, pList) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + } + p := vars["project-name"] + ca := vars["composite-app-name"] + v := vars["composite-app-version"] + i := vars["intent-name"] + + applicationsAndClusterInfo, err := h.client.GetAllAppIntents(p, ca, v, i) + 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(applicationsAndClusterInfo) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + return + +} + func (h appIntentHandler) deleteAppIntentHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) diff --git a/src/orchestrator/api/app_profilehandler.go b/src/orchestrator/api/app_profilehandler.go index ef7833de..f2475e23 100644 --- a/src/orchestrator/api/app_profilehandler.go +++ b/src/orchestrator/api/app_profilehandler.go @@ -210,12 +210,12 @@ func (h appProfileHandler) getAppProfileHandler(w http.ResponseWriter, r *http.R http.Error(w, err.Error(), http.StatusInternalServerError) return } - kc_bytes, err := base64.StdEncoding.DecodeString(retAppProfileContent.Profile) + kcBytes, err := base64.StdEncoding.DecodeString(retAppProfileContent.Profile) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } - _, err = pw.Write(kc_bytes) + _, err = pw.Write(kcBytes) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return @@ -231,12 +231,12 @@ func (h appProfileHandler) getAppProfileHandler(w http.ResponseWriter, r *http.R case "application/octet-stream": w.Header().Set("Content-Type", "application/octet-stream") w.WriteHeader(http.StatusOK) - kc_bytes, err := base64.StdEncoding.DecodeString(retAppProfileContent.Profile) + kcBytes, err := base64.StdEncoding.DecodeString(retAppProfileContent.Profile) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } - _, err = w.Write(kc_bytes) + _, err = w.Write(kcBytes) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return |