Loading go-apps/meep-virt-engine/server/chart-template.go +25 −25 Original line number Diff line number Diff line Loading @@ -128,14 +128,11 @@ type SandboxTemplate struct { AuthEnabled bool } // Service map var serviceMap map[string]string // Deploy - Generate charts & deploy func Deploy(sandboxName string, model *mod.Model) error { // Deploy - Generate charts & deploy single process or entire scenario func Deploy(sandboxName string, procName string, model *mod.Model) error { // Create scenario charts charts, err := generateScenarioCharts(sandboxName, model) charts, err := generateScenarioCharts(sandboxName, procName, model) if err != nil { log.Debug("Error creating scenario charts: ", err) return err Loading @@ -152,13 +149,19 @@ func Deploy(sandboxName string, model *mod.Model) error { return nil } func generateScenarioCharts(sandboxName string, model *mod.Model) (charts []helm.Chart, err error) { serviceMap = map[string]string{} func generateScenarioCharts(sandboxName string, procName string, model *mod.Model) (charts []helm.Chart, err error) { serviceMap := map[string]string{} procNames := model.GetNodeNames("CLOUD-APP") procNames = append(procNames, model.GetNodeNames("EDGE-APP")...) procNames = append(procNames, model.GetNodeNames("UE-APP")...) for _, name := range procNames { // Check if single process is being added if procName != "" && name != procName { continue } // Retrieve node process information from model node := model.GetNode(name) if node == nil { err = errors.New("Error finding process: " + name) Loading Loading @@ -349,7 +352,7 @@ func generateScenarioCharts(sandboxName string, model *mod.Model) (charts []helm // Create virt-engine chart chartName := proc.Name chartLocation, err := createChart(chartName, sandboxName, scenarioName, scenarioTemplate) chartLocation, _, err := createChart(chartName, sandboxName, scenarioName, scenarioTemplate) if err != nil { log.Debug("yaml creation file process: ", err) return nil, err Loading @@ -366,14 +369,6 @@ func generateScenarioCharts(sandboxName string, model *mod.Model) (charts []helm // Create ME Svc chart func createMeSvcChart(sandboxName string, scenarioName string, meSvcName string, ports []ServicePortTemplate) (*helm.Chart, error) { // Ignore if chart already exists if _, found := serviceMap[meSvcName]; found { return nil, nil } // Add ME Svc to map serviceMap[meSvcName] = "meepMeSvc: " + meSvcName // Create default scenario template var scenarioTemplate ScenarioTemplate serviceTemplate := &scenarioTemplate.Service Loading @@ -392,11 +387,15 @@ func createMeSvcChart(sandboxName string, scenarioName string, meSvcName string, // Create virt-engine chart for new group service chartName := "me-svc-" + meSvcName chartLocation, err := createChart(chartName, sandboxName, scenarioName, scenarioTemplate) chartLocation, isNew, err := createChart(chartName, sandboxName, scenarioName, scenarioTemplate) if err != nil { log.Debug("yaml creation file process: ", err) return nil, err } if !isNew { log.Debug("Ignoring existing chart") return nil, nil } c := newChart(chartName, sandboxName, scenarioName, chartLocation, "") return &c, nil } Loading @@ -409,11 +408,11 @@ func deployCharts(charts []helm.Chart, sandboxName string) error { return nil } func createChart(chartName string, sandboxName string, scenarioName string, templateData interface{}) (string, error) { func createChart(chartName string, sandboxName string, scenarioName string, templateData interface{}) (outChart string, isNew bool, err error) { isNew = true // Determine source templates & destination chart location var templateChart string var outChart string if scenarioName == "" { templateChart = "/templates/sandbox/" + chartName outChart = "/charts/" + sandboxName + "/sandbox/" + chartName Loading @@ -428,13 +427,14 @@ func createChart(chartName string, sandboxName string, scenarioName string, temp t, err := template.ParseFiles(templateValues) if err != nil { log.Error(err) return "", err return "", isNew, err } // Remove old chart if it already exists if _, err := os.Stat(outChart); err == nil { log.Debug("Removing old chart from path: ", outChart) os.RemoveAll(outChart) isNew = false } // Create new chart folder Loading @@ -445,18 +445,18 @@ func createChart(chartName string, sandboxName string, scenarioName string, temp f, err := os.Create(outValues) if err != nil { log.Debug("create file: ", err) return "", err return "", isNew, err } // Fill new chart values file using template data err = t.Execute(f, templateData) if err != nil { log.Debug("execute: ", err) return "", err return "", isNew, err } f.Close() return outChart, nil return outChart, isNew, nil } func newChart(chartName string, sandboxName string, scenarioName string, chartLocation string, valuesFile string) helm.Chart { Loading Loading @@ -581,7 +581,7 @@ func generateSandboxCharts(sandboxName string) (charts []helm.Chart, err error) // Create sandbox charts for pod := range ve.sboxPods { var chartLocation string chartLocation, err = createChart(pod, sandboxName, "", sandboxTemplate) chartLocation, _, err = createChart(pod, sandboxName, "", sandboxTemplate) if err != nil { return } Loading go-apps/meep-virt-engine/server/virt-engine.go +35 −4 Original line number Diff line number Diff line Loading @@ -214,7 +214,7 @@ func activateScenario(sandboxName string) { ve.activeScenarioNames[sandboxName] = activeModel.GetScenarioName() // Deploy scenario err := Deploy(sandboxName, activeModel) err := Deploy(sandboxName, "", activeModel) if err != nil { log.Error("Error creating charts: ", err) return Loading @@ -234,9 +234,18 @@ func addScenarioNode(sandboxName string, nodeName string) { // Sync with active scenario store activeModel.UpdateScenario() // Find process in active scenario // Create chart template // Deploy single process nodeType := activeModel.GetNodeType(nodeName) if mod.IsProc(nodeType) { err := Deploy(sandboxName, nodeName, activeModel) if err != nil { log.Error("Error creating charts: ", err) return } } else { log.Error("Unsupported node type: ", nodeType) return } } func modifyScenarioNode(sandboxName string, nodeName string) { Loading @@ -249,8 +258,30 @@ func modifyScenarioNode(sandboxName string, nodeName string) { return } // Get cached scenario name scenarioName := ve.activeScenarioNames[sandboxName] // Sync with active scenario store activeModel.UpdateScenario() // Handle process updates only nodeType := activeModel.GetNodeType(nodeName) if mod.IsProc(nodeType) { // Remove existing process _, chartsToDelete := deleteReleases(sandboxName, scenarioName, nodeName) log.Info("Number of charts to be deleted: ", chartsToDelete) // Add updated process err := Deploy(sandboxName, nodeName, activeModel) if err != nil { log.Error("Error creating charts: ", err) return } } else { log.Error("Unsupported node type: ", nodeType) return } } func removeScenarioNode(sandboxName string, nodeName string) { Loading Loading
go-apps/meep-virt-engine/server/chart-template.go +25 −25 Original line number Diff line number Diff line Loading @@ -128,14 +128,11 @@ type SandboxTemplate struct { AuthEnabled bool } // Service map var serviceMap map[string]string // Deploy - Generate charts & deploy func Deploy(sandboxName string, model *mod.Model) error { // Deploy - Generate charts & deploy single process or entire scenario func Deploy(sandboxName string, procName string, model *mod.Model) error { // Create scenario charts charts, err := generateScenarioCharts(sandboxName, model) charts, err := generateScenarioCharts(sandboxName, procName, model) if err != nil { log.Debug("Error creating scenario charts: ", err) return err Loading @@ -152,13 +149,19 @@ func Deploy(sandboxName string, model *mod.Model) error { return nil } func generateScenarioCharts(sandboxName string, model *mod.Model) (charts []helm.Chart, err error) { serviceMap = map[string]string{} func generateScenarioCharts(sandboxName string, procName string, model *mod.Model) (charts []helm.Chart, err error) { serviceMap := map[string]string{} procNames := model.GetNodeNames("CLOUD-APP") procNames = append(procNames, model.GetNodeNames("EDGE-APP")...) procNames = append(procNames, model.GetNodeNames("UE-APP")...) for _, name := range procNames { // Check if single process is being added if procName != "" && name != procName { continue } // Retrieve node process information from model node := model.GetNode(name) if node == nil { err = errors.New("Error finding process: " + name) Loading Loading @@ -349,7 +352,7 @@ func generateScenarioCharts(sandboxName string, model *mod.Model) (charts []helm // Create virt-engine chart chartName := proc.Name chartLocation, err := createChart(chartName, sandboxName, scenarioName, scenarioTemplate) chartLocation, _, err := createChart(chartName, sandboxName, scenarioName, scenarioTemplate) if err != nil { log.Debug("yaml creation file process: ", err) return nil, err Loading @@ -366,14 +369,6 @@ func generateScenarioCharts(sandboxName string, model *mod.Model) (charts []helm // Create ME Svc chart func createMeSvcChart(sandboxName string, scenarioName string, meSvcName string, ports []ServicePortTemplate) (*helm.Chart, error) { // Ignore if chart already exists if _, found := serviceMap[meSvcName]; found { return nil, nil } // Add ME Svc to map serviceMap[meSvcName] = "meepMeSvc: " + meSvcName // Create default scenario template var scenarioTemplate ScenarioTemplate serviceTemplate := &scenarioTemplate.Service Loading @@ -392,11 +387,15 @@ func createMeSvcChart(sandboxName string, scenarioName string, meSvcName string, // Create virt-engine chart for new group service chartName := "me-svc-" + meSvcName chartLocation, err := createChart(chartName, sandboxName, scenarioName, scenarioTemplate) chartLocation, isNew, err := createChart(chartName, sandboxName, scenarioName, scenarioTemplate) if err != nil { log.Debug("yaml creation file process: ", err) return nil, err } if !isNew { log.Debug("Ignoring existing chart") return nil, nil } c := newChart(chartName, sandboxName, scenarioName, chartLocation, "") return &c, nil } Loading @@ -409,11 +408,11 @@ func deployCharts(charts []helm.Chart, sandboxName string) error { return nil } func createChart(chartName string, sandboxName string, scenarioName string, templateData interface{}) (string, error) { func createChart(chartName string, sandboxName string, scenarioName string, templateData interface{}) (outChart string, isNew bool, err error) { isNew = true // Determine source templates & destination chart location var templateChart string var outChart string if scenarioName == "" { templateChart = "/templates/sandbox/" + chartName outChart = "/charts/" + sandboxName + "/sandbox/" + chartName Loading @@ -428,13 +427,14 @@ func createChart(chartName string, sandboxName string, scenarioName string, temp t, err := template.ParseFiles(templateValues) if err != nil { log.Error(err) return "", err return "", isNew, err } // Remove old chart if it already exists if _, err := os.Stat(outChart); err == nil { log.Debug("Removing old chart from path: ", outChart) os.RemoveAll(outChart) isNew = false } // Create new chart folder Loading @@ -445,18 +445,18 @@ func createChart(chartName string, sandboxName string, scenarioName string, temp f, err := os.Create(outValues) if err != nil { log.Debug("create file: ", err) return "", err return "", isNew, err } // Fill new chart values file using template data err = t.Execute(f, templateData) if err != nil { log.Debug("execute: ", err) return "", err return "", isNew, err } f.Close() return outChart, nil return outChart, isNew, nil } func newChart(chartName string, sandboxName string, scenarioName string, chartLocation string, valuesFile string) helm.Chart { Loading Loading @@ -581,7 +581,7 @@ func generateSandboxCharts(sandboxName string) (charts []helm.Chart, err error) // Create sandbox charts for pod := range ve.sboxPods { var chartLocation string chartLocation, err = createChart(pod, sandboxName, "", sandboxTemplate) chartLocation, _, err = createChart(pod, sandboxName, "", sandboxTemplate) if err != nil { return } Loading
go-apps/meep-virt-engine/server/virt-engine.go +35 −4 Original line number Diff line number Diff line Loading @@ -214,7 +214,7 @@ func activateScenario(sandboxName string) { ve.activeScenarioNames[sandboxName] = activeModel.GetScenarioName() // Deploy scenario err := Deploy(sandboxName, activeModel) err := Deploy(sandboxName, "", activeModel) if err != nil { log.Error("Error creating charts: ", err) return Loading @@ -234,9 +234,18 @@ func addScenarioNode(sandboxName string, nodeName string) { // Sync with active scenario store activeModel.UpdateScenario() // Find process in active scenario // Create chart template // Deploy single process nodeType := activeModel.GetNodeType(nodeName) if mod.IsProc(nodeType) { err := Deploy(sandboxName, nodeName, activeModel) if err != nil { log.Error("Error creating charts: ", err) return } } else { log.Error("Unsupported node type: ", nodeType) return } } func modifyScenarioNode(sandboxName string, nodeName string) { Loading @@ -249,8 +258,30 @@ func modifyScenarioNode(sandboxName string, nodeName string) { return } // Get cached scenario name scenarioName := ve.activeScenarioNames[sandboxName] // Sync with active scenario store activeModel.UpdateScenario() // Handle process updates only nodeType := activeModel.GetNodeType(nodeName) if mod.IsProc(nodeType) { // Remove existing process _, chartsToDelete := deleteReleases(sandboxName, scenarioName, nodeName) log.Info("Number of charts to be deleted: ", chartsToDelete) // Add updated process err := Deploy(sandboxName, nodeName, activeModel) if err != nil { log.Error("Error creating charts: ", err) return } } else { log.Error("Unsupported node type: ", nodeType) return } } func removeScenarioNode(sandboxName string, nodeName string) { Loading