Uniform formatting and volume as hostpath
[ealt-edge.git] / mecm / mepm / applcm / broker / pkg / handlers / handlersImpl.go
index cd66846..6867b2c 100644 (file)
@@ -23,60 +23,36 @@ import (
        "bytes"
        "encoding/json"
        "fmt"
+       "io"
+       "io/ioutil"
+       "net/http"
+       "os"
+       "path/filepath"
+       "strings"
+
        "github.com/buger/jsonparser"
        "github.com/ghodss/yaml"
        "github.com/google/uuid"
        "github.com/gorilla/mux"
-       "github.com/jinzhu/gorm"
        "github.com/sirupsen/logrus"
        "google.golang.org/grpc/codes"
        "google.golang.org/grpc/status"
-       "io"
-       "io/ioutil"
-       "net/http"
-       "os"
-       "path/filepath"
-       "strings"
 )
 
-// DB name
-const DbName = "applcmDB"
-
 // Handler of REST APIs
 type HandlerImpl struct {
-       logger *logrus.Logger
-       db     *gorm.DB
+       logger    *logrus.Logger
+       dbAdapter *dbAdapter.DbAdapter
 }
 
 // Creates handler implementation
 func newHandlerImpl(logger *logrus.Logger) (impl HandlerImpl) {
        impl.logger = logger
-       impl.db = impl.createDatabase()
+       impl.dbAdapter = dbAdapter.NewDbAdapter(logger)
+       impl.dbAdapter.CreateDatabase()
        return
 }
 
-// Creates database
-func (impl *HandlerImpl) createDatabase() *gorm.DB {
-       impl.logger.Info("creating Database...")
-
-       usrpswd := os.Getenv("MYSQL_USER") + ":" + os.Getenv("MYSQL_PASSWORD")
-       host := "@tcp(" + "dbhost" + ":3306)/"
-
-       db, err := gorm.Open("mysql", usrpswd + host)
-       if err != nil {
-               impl.logger.Fatalf("Database connect error", err.Error())
-       }
-
-       db.Exec("CREATE DATABASE  " + DbName)
-       db.Exec("USE applcmDB")
-       gorm.DefaultCallback.Create().Remove("mysql:set_identity_insert")
-
-       impl.logger.Info("Migrating models...")
-       db.AutoMigrate(&model.AppPackageInfo{})
-       db.AutoMigrate(&model.AppInstanceInfo{})
-       return db
-}
-
 // Uploads package
 func (impl *HandlerImpl) UploadPackage(w http.ResponseWriter, r *http.Request) {
 
@@ -124,7 +100,7 @@ func (impl *HandlerImpl) UploadPackage(w http.ResponseWriter, r *http.Request) {
        impl.logger.Infof("Application package info from package")
        defer r.Body.Close()
 
-       dbAdapter.InsertAppPackageInfo(impl.db, appPkgInfo)
+       impl.dbAdapter.InsertAppPackageInfo(appPkgInfo)
 
        /*http.StatusOK*/
        respondJSON(w, http.StatusCreated, appPkgInfo)
@@ -206,7 +182,7 @@ func (impl *HandlerImpl) decodeApplicationDescriptor(w http.ResponseWriter, serv
 func (impl *HandlerImpl) QueryAppPackageInfo(w http.ResponseWriter, r *http.Request) {
        params := mux.Vars(r)
        appPkgId := params["appPkgId"]
-       appPkgInfo := dbAdapter.GetAppPackageInfo(impl.db, appPkgId)
+       appPkgInfo := impl.dbAdapter.GetAppPackageInfo(appPkgId)
        if appPkgInfo.ID == "" {
                respondJSON(w, http.StatusNotFound, "ID not exist")
                return
@@ -218,12 +194,12 @@ func (impl *HandlerImpl) QueryAppPackageInfo(w http.ResponseWriter, r *http.Requ
 func (impl *HandlerImpl) DeleteAppPackage(w http.ResponseWriter, r *http.Request) {
        params := mux.Vars(r)
        appPkgId := params["appPkgId"]
-       appPackageInfo := dbAdapter.GetAppPackageInfo(impl.db, appPkgId)
+       appPackageInfo := impl.dbAdapter.GetAppPackageInfo(appPkgId)
        if appPackageInfo.ID == "" {
                respondJSON(w, http.StatusNotFound, "ID not exist")
                return
        }
-       dbAdapter.DeleteAppPackageInfo(impl.db, appPkgId)
+       impl.dbAdapter.DeleteAppPackageInfo(appPkgId)
 
        deletePackage := PackageFolderPath + appPackageInfo.AppPackage
 
@@ -247,7 +223,7 @@ func (impl *HandlerImpl) CreateAppInstance(w http.ResponseWriter, r *http.Reques
                return
        }
 
-       appPkgInfo := dbAdapter.GetAppPackageInfo(impl.db, req.AppDID)
+       appPkgInfo := impl.dbAdapter.GetAppPackageInfo(req.AppDID)
        if appPkgInfo.ID == "" {
                respondJSON(w, http.StatusNotFound, "ID not exist")
                return
@@ -272,7 +248,7 @@ func (impl *HandlerImpl) CreateAppInstance(w http.ResponseWriter, r *http.Reques
                AppPkgID:               appPkgInfo.AppDID,
                InstantiationState:     "NOT_INSTANTIATED",
        }
-       dbAdapter.InsertAppInstanceInfo(impl.db, appInstanceInfo)
+       impl.dbAdapter.InsertAppInstanceInfo(appInstanceInfo)
        impl.logger.Infof("CreateAppInstance:", req)
        /*http.StatusOK*/
        respondJSON(w, http.StatusCreated, json.NewEncoder(w).Encode(appInstanceInfo))
@@ -290,8 +266,8 @@ func (impl *HandlerImpl) InstantiateAppInstance(w http.ResponseWriter, r *http.R
        params := mux.Vars(r)
        appInstanceId := params["appInstanceId"]
 
-       appInstanceInfo := dbAdapter.GetAppInstanceInfo(impl.db, appInstanceId)
-       appPackageInfo := dbAdapter.GetAppPackageInfo(impl.db, appInstanceInfo.AppDID)
+       appInstanceInfo := impl.dbAdapter.GetAppInstanceInfo(appInstanceId)
+       appPackageInfo := impl.dbAdapter.GetAppPackageInfo(appInstanceInfo.AppDID)
        if appInstanceInfo.ID == "" || appPackageInfo.ID == "" {
                respondJSON(w, http.StatusNotFound, "ID not exist")
                return
@@ -321,7 +297,8 @@ func (impl *HandlerImpl) InstantiateAppInstance(w http.ResponseWriter, r *http.R
                        respondError(w, http.StatusInternalServerError, "artifact not available in application package")
                        return
                }
-               pluginInfo = "helm.plugin" + ":" + os.Getenv("HELM_PLUGIN_PORT")
+               pluginInfo = "helmplugin" + ":" + os.Getenv("HELM_PLUGIN_PORT")
+               impl.logger.Infof("Plugin Info ", pluginInfo)
        case "kubernetes":
                pkgPath := PackageFolderPath + packageName + PackageArtifactPath + "Kubernetes"
                artifact = impl.getDeploymentArtifact(pkgPath, "*.yaml")
@@ -337,7 +314,7 @@ func (impl *HandlerImpl) InstantiateAppInstance(w http.ResponseWriter, r *http.R
        impl.logger.Infof("Artifact to deploy:", artifact)
 
        adapter := pluginAdapter.NewPluginAdapter(pluginInfo, impl.logger)
-       workloadId, err := adapter.Instantiate(pluginInfo, req.SelectedMECHostInfo.HostID, artifact)
+       workloadId, err, resStatus := adapter.Instantiate(pluginInfo, req.SelectedMECHostInfo.HostID, artifact)
        if err != nil {
                st, ok := status.FromError(err)
                if ok && st.Code() == codes.InvalidArgument {
@@ -347,9 +324,13 @@ func (impl *HandlerImpl) InstantiateAppInstance(w http.ResponseWriter, r *http.R
                        respondError(w, http.StatusInternalServerError, err.Error())
                }
        }
-       dbAdapter.UpdateAppInstanceInfoInstStatusHostAndWorkloadId(impl.db, appInstanceId, "INSTANTIATED", req.SelectedMECHostInfo.HostID, workloadId)
 
-       respondJSON(w, http.StatusAccepted, json.NewEncoder(w).Encode(""))
+       if resStatus == "Failure" {
+               respondError(w, http.StatusInternalServerError, err.Error())
+       }
+
+       impl.dbAdapter.UpdateAppInstanceInfoInstStatusHostAndWorkloadId(appInstanceId, "INSTANTIATED", req.SelectedMECHostInfo.HostID, workloadId)
+       respondJSON(w, http.StatusAccepted, json.NewEncoder(w).Encode(workloadId))
 }
 
 // Gets deployment artifact
@@ -387,8 +368,8 @@ func (impl *HandlerImpl) QueryAppInstanceInfo(w http.ResponseWriter, r *http.Req
        params := mux.Vars(r)
        appInstanceId := params["appInstanceId"]
 
-       appInstanceInfo := dbAdapter.GetAppInstanceInfo(impl.db, appInstanceId)
-       appPackageInfo := dbAdapter.GetAppPackageInfo(impl.db, appInstanceInfo.AppDID)
+       appInstanceInfo := impl.dbAdapter.GetAppInstanceInfo(appInstanceId)
+       appPackageInfo := impl.dbAdapter.GetAppPackageInfo(appInstanceInfo.AppDID)
        if appInstanceInfo.ID == "" || appPackageInfo.ID == "" {
                respondJSON(w, http.StatusNotFound, "ID not exist")
                return
@@ -400,7 +381,7 @@ func (impl *HandlerImpl) QueryAppInstanceInfo(w http.ResponseWriter, r *http.Req
 
                switch appPackageInfo.DeployType {
                case "helm":
-                       pluginInfo = "helm.plugin" + ":" + os.Getenv("HELM_PLUGIN_PORT")
+                       pluginInfo = "helmplugin" + ":" + os.Getenv("HELM_PLUGIN_PORT")
                case "kubernetes":
                        pluginInfo = "kubernetes.plugin" + ":" + os.Getenv("KUBERNETES_PLUGIN_PORT")
                default:
@@ -439,8 +420,8 @@ func (impl *HandlerImpl) TerminateAppInstance(w http.ResponseWriter, r *http.Req
        params := mux.Vars(r)
        appInstanceId := params["appInstanceId"]
 
-       appInstanceInfo := dbAdapter.GetAppInstanceInfo(impl.db, appInstanceId)
-       appPackageInfo := dbAdapter.GetAppPackageInfo(impl.db, appInstanceInfo.AppDID)
+       appInstanceInfo := impl.dbAdapter.GetAppInstanceInfo(appInstanceId)
+       appPackageInfo := impl.dbAdapter.GetAppPackageInfo(appInstanceInfo.AppDID)
        if appInstanceInfo.ID == "" || appPackageInfo.ID == "" {
                respondJSON(w, http.StatusNotFound, "ID not exist")
                return
@@ -454,7 +435,7 @@ func (impl *HandlerImpl) TerminateAppInstance(w http.ResponseWriter, r *http.Req
        var pluginInfo string
        switch appPackageInfo.DeployType {
        case "helm":
-               pluginInfo = "helm.plugin" + ":" + os.Getenv("HELM_PLUGIN_PORT")
+               pluginInfo = "helmplugin" + ":" + os.Getenv("HELM_PLUGIN_PORT")
        case "kubernetes":
                pluginInfo = "kubernetes.plugin" + ":" + os.Getenv("KUBERNETES_PLUGIN_PORT")
        default:
@@ -468,7 +449,7 @@ func (impl *HandlerImpl) TerminateAppInstance(w http.ResponseWriter, r *http.Req
                respondError(w, http.StatusInternalServerError, err.Error())
                return
        }
-       dbAdapter.UpdateAppInstanceInfoInstStatusAndWorkload(impl.db, appInstanceId, "NOT_INSTANTIATED", "")
+       impl.dbAdapter.UpdateAppInstanceInfoInstStatusAndWorkload(appInstanceId, "NOT_INSTANTIATED", "")
 
        respondJSON(w, http.StatusAccepted, json.NewEncoder(w).Encode(""))
 }
@@ -479,7 +460,7 @@ func (impl *HandlerImpl) DeleteAppInstanceIdentifier(w http.ResponseWriter, r *h
        params := mux.Vars(r)
        appInstanceId := params["appInstanceId"]
 
-       dbAdapter.DeleteAppInstanceInfo(impl.db, appInstanceId)
+       impl.dbAdapter.DeleteAppInstanceInfo(appInstanceId)
        respondJSON(w, http.StatusOK, json.NewEncoder(w).Encode(""))
 }