Add API to query all composite apps under a project 02/110302/1
authorRajamohan Raj <rajamohan.raj@intel.com>
Fri, 17 Jul 2020 02:11:13 +0000 (02:11 +0000)
committerRajamohan Raj <rajamohan.raj@intel.com>
Fri, 17 Jul 2020 02:17:49 +0000 (02:17 +0000)
In this patch implemented a new route to
query all compApps under a project.

Issue-ID: MULTICLOUD-1127
Signed-off-by: Rajamohan Raj <rajamohan.raj@intel.com>
Change-Id: I5d5d4861539edd2ca0eccff16d94b75439e14db7

src/orchestrator/api/api.go
src/orchestrator/api/composite_app_handler.go
src/orchestrator/pkg/module/compositeapp.go
src/orchestrator/pkg/module/instantiation_appcontext_helper.go

index 9194419..5f1665a 100644 (file)
@@ -69,6 +69,7 @@ func NewRouter(projectClient moduleLib.ProjectManager,
        }
        router.HandleFunc("/projects/{project-name}/composite-apps", compAppHandler.createHandler).Methods("POST")
        router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{version}", compAppHandler.getHandler).Methods("GET")
+       router.HandleFunc("/projects/{project-name}/composite-apps", compAppHandler.getAllCompositeAppsHandler).Methods("GET")
        router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{version}", compAppHandler.deleteHandler).Methods("DELETE")
 
        if appClient == nil {
index b54c488..ab052f0 100644 (file)
@@ -95,6 +95,32 @@ func (h compositeAppHandler) getHandler(w http.ResponseWriter, r *http.Request)
        }
 }
 
+// getAllCompositeAppsHandler handles the GetAllComppositeApps, returns a list of compositeApps under a project
+func (h compositeAppHandler) getAllCompositeAppsHandler(w http.ResponseWriter, r *http.Request) {
+       vars := mux.Vars(r)
+       pName := vars["project-name"]
+
+       var caList []moduleLib.CompositeApp
+
+       cApps, err := h.client.GetAllCompositeApps(pName)
+       if err != nil {
+               http.Error(w, err.Error(), http.StatusNotFound)
+               return
+       }
+
+       for _, cApp := range cApps {
+               caList = append(caList, moduleLib.CompositeApp{Metadata: cApp.Metadata, Spec: cApp.Spec})
+       }
+       w.Header().Set("Content-Type", "application/json")
+       w.WriteHeader(http.StatusOK)
+       err = json.NewEncoder(w).Encode(caList)
+       if err != nil {
+               http.Error(w, err.Error(), http.StatusNotFound)
+               return
+       }
+       return
+}
+
 // deleteHandler handles DELETE operations on a particular CompositeApp Name
 func (h compositeAppHandler) deleteHandler(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
index 7050236..5bf7dde 100644 (file)
@@ -64,6 +64,7 @@ func (cK CompositeAppKey) String() string {
 type CompositeAppManager interface {
        CreateCompositeApp(c CompositeApp, p string) (CompositeApp, error)
        GetCompositeApp(name string, version string, p string) (CompositeApp, error)
+       GetAllCompositeApps(p string) ([]CompositeApp, error)
        DeleteCompositeApp(name string, version string, p string) error
 }
 
@@ -140,6 +141,38 @@ func (v *CompositeAppClient) GetCompositeApp(name string, version string, p stri
        return CompositeApp{}, pkgerrors.New("Error getting composite application")
 }
 
+// GetAllCompositeApps returns all the compositeApp for a given project
+func (v *CompositeAppClient) GetAllCompositeApps(p string) ([]CompositeApp, error) {
+
+       _, err := NewProjectClient().GetProject(p)
+       if err != nil {
+               return []CompositeApp{}, pkgerrors.New("Unable to find the project")
+       }
+
+       key := CompositeAppKey{
+               CompositeAppName: "",
+               Version:          "",
+               Project:          p,
+       }
+
+       var caList []CompositeApp
+       values, err := db.DBconn.Find(v.storeName, key, v.tagMeta)
+       if err != nil {
+               return []CompositeApp{}, pkgerrors.Wrap(err, "Getting CompositeApps")
+       }
+
+       for _, value := range values {
+               ca := CompositeApp{}
+               err = db.DBconn.Unmarshal(value, &ca)
+               if err != nil {
+                       return []CompositeApp{}, pkgerrors.Wrap(err, "Unmarshaling CompositeApp")
+               }
+               caList = append(caList, ca)
+       }
+
+       return caList, nil
+}
+
 // DeleteCompositeApp deletes the  CompositeApp from database
 func (v *CompositeAppClient) DeleteCompositeApp(name string, version string, p string) error {
 
index 1cb3f23..a8c6eda 100644 (file)
@@ -89,7 +89,7 @@ func getResources(st []helm.KubernetesResourceTemplate) ([]resource, error) {
                // This might happen when the rendered file just has some comments inside, no real k8s object.
                if n == SEPARATOR {
                        log.Info(":: Ignoring, Unable to render the template ::", log.Fields{"YAML PATH": t.FilePath})
-                       continue;
+                       continue
                }
 
                resources = append(resources, resource{name: n, filecontent: string(yamlFile)})