"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"
"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) {
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)
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
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
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
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))
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
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")
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 {
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
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
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:
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
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:
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(""))
}
params := mux.Vars(r)
appInstanceId := params["appInstanceId"]
- dbAdapter.DeleteAppInstanceInfo(impl.db, appInstanceId)
+ impl.dbAdapter.DeleteAppInstanceInfo(appInstanceId)
respondJSON(w, http.StatusOK, json.NewEncoder(w).Encode(""))
}