Loading go-apps/meep-mon-engine/server/mon-engine.go +6 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import ( "fmt" "net/http" "os" "sort" "strings" dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr" Loading Loading @@ -508,6 +509,11 @@ func meGetStates(w http.ResponseWriter, r *http.Request) { data.AllPodsStatus.PodStatus = append(data.AllPodsStatus.PodStatus, *podStatus) } // Sort pod status slice by name sort.Slice(data.AllPodsStatus.PodStatus, func(i, j int) bool { return data.AllPodsStatus.PodStatus[i].Name < data.AllPodsStatus.PodStatus[j].Name }) w.Header().Set("Content-Type", "application/json; charset=UTF-8") // Format response Loading go-apps/meep-virt-engine/helm/delete.go +2 −1 Original line number Diff line number Diff line Loading @@ -24,13 +24,14 @@ import ( func deleteReleases(charts []Chart) error { for _, c := range charts { go deleteRelease(c) deleteRelease(c) } return nil } func deleteRelease(chart Chart) { log.Debug("Deleting release: " + chart.ReleaseName) var cmd = exec.Command("helm", "delete", chart.ReleaseName, "--purge") out, err := cmd.CombinedOutput() if err != nil { Loading go-apps/meep-virt-engine/helm/helm.go +2 −38 Original line number Diff line number Diff line Loading @@ -16,20 +16,6 @@ package helm import ( "fmt" log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" ) const ( StateIdle = "IDLE" StateInstalling = "INSTALLING" StateDeleting = "DELETING" ) var state string = StateIdle func GetReleasesName() ([]Release, error) { return getReleasesName() } Loading @@ -39,31 +25,9 @@ func GetReleases() ([]Release, error) { } func InstallCharts(charts []Chart) error { if state == StateIdle { state = StateInstalling go func() { log.Debug("Installing ", len(charts), " Charts...") _ = installCharts(charts) log.Debug("Charts installed (", len(charts), ")") state = StateIdle }() return nil } err := fmt.Errorf("Service busy [%s]", state) return err return runTask(Install, charts) } func DeleteReleases(charts []Chart) error { if state == StateIdle { state = StateDeleting go func() { log.Debug("Deleting ", len(charts), " Releases...") _ = deleteReleases(charts) log.Debug("Releases deleted (", len(charts), ")") state = StateIdle }() return nil } err := fmt.Errorf("Service busy [%s]", state) return err return runTask(Delete, charts) } go-apps/meep-virt-engine/helm/install.go +35 −32 Original line number Diff line number Diff line Loading @@ -29,13 +29,18 @@ func installCharts(charts []Chart) error { if err != nil { return err } err = install(charts) for _, chart := range charts { err := install(chart) if err != nil { // Cleanup release log.Info("Cleaning installed releases") cleanReleases(charts) } return err } } return nil } func ensureReleases(charts []Chart) error { // ensure that releases do not already exist Loading @@ -52,32 +57,31 @@ func ensureReleases(charts []Chart) error { return nil } func install(charts []Chart) error { for _, c := range charts { func install(chart Chart) error { log.Debug("Installing chart: " + chart.ReleaseName) var cmd *exec.Cmd if strings.Trim(c.ValuesFile, " ") == "" { if strings.Trim(chart.ValuesFile, " ") == "" { cmd = exec.Command("helm", "install", "--name", c.ReleaseName, "--namespace", c.Namespace, "--set", "nameOverride="+c.Name, "--set", "fullnameOverride="+c.Name, c.Location, "--replace") "--name", chart.ReleaseName, "--namespace", chart.Namespace, "--set", "nameOverride="+chart.Name, "--set", "fullnameOverride="+chart.Name, chart.Location, "--replace") } else { cmd = exec.Command("helm", "install", "--name", c.ReleaseName, "--namespace", c.Namespace, "--set", "nameOverride="+c.Name, "--set", "fullnameOverride="+c.Name, "-f", c.ValuesFile, c.Location, "--replace") "--name", chart.ReleaseName, "--namespace", chart.Namespace, "--set", "nameOverride="+chart.Name, "--set", "fullnameOverride="+chart.Name, "-f", chart.ValuesFile, chart.Location, "--replace") } out, err := cmd.CombinedOutput() if err != nil { log.Error("Failed to install Release [" + c.ReleaseName + "] at " + c.Location) log.Error("Failed to install Release [" + chart.ReleaseName + "] at " + chart.Location) log.Error("Error(", err.Error(), "): ", string(out)) return err } } return nil } Loading @@ -85,7 +89,6 @@ func cleanReleases(charts []Chart) { var toClean []Chart var cnt int releases, _ := GetReleasesName() // ensure that releases do not exist for _, c := range charts { for _, r := range releases { Loading @@ -97,6 +100,6 @@ func cleanReleases(charts []Chart) { } if cnt > 0 { _ = DeleteReleases(toClean) _ = deleteReleases(toClean) } } go-apps/meep-virt-engine/helm/worker.go 0 → 100644 +67 −0 Original line number Diff line number Diff line /* * Copyright (c) 2020 InterDigital Communications, Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package helm import ( log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" ) type Task string const ( Install Task = "INSTALL" Delete Task = "DELETE" ) type Job struct { task Task charts []Chart } var queue *chan Job = nil func startWorker() { if queue != nil { return } queueChan := make(chan Job, 5) queue = &queueChan go func() { for job := range queueChan { switch job.task { case Install: log.Debug("Installing ", len(job.charts), " Charts...") _ = installCharts(job.charts) log.Debug("Charts installed (", len(job.charts), ")") case Delete: log.Debug("Deleting ", len(job.charts), " Releases...") _ = deleteReleases(job.charts) log.Debug("Releases deleted (", len(job.charts), ")") } } queue = nil }() } func runTask(task Task, charts []Chart) error { startWorker() var job Job = Job{task: task, charts: charts} *queue <- job return nil } Loading
go-apps/meep-mon-engine/server/mon-engine.go +6 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import ( "fmt" "net/http" "os" "sort" "strings" dkm "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-data-key-mgr" Loading Loading @@ -508,6 +509,11 @@ func meGetStates(w http.ResponseWriter, r *http.Request) { data.AllPodsStatus.PodStatus = append(data.AllPodsStatus.PodStatus, *podStatus) } // Sort pod status slice by name sort.Slice(data.AllPodsStatus.PodStatus, func(i, j int) bool { return data.AllPodsStatus.PodStatus[i].Name < data.AllPodsStatus.PodStatus[j].Name }) w.Header().Set("Content-Type", "application/json; charset=UTF-8") // Format response Loading
go-apps/meep-virt-engine/helm/delete.go +2 −1 Original line number Diff line number Diff line Loading @@ -24,13 +24,14 @@ import ( func deleteReleases(charts []Chart) error { for _, c := range charts { go deleteRelease(c) deleteRelease(c) } return nil } func deleteRelease(chart Chart) { log.Debug("Deleting release: " + chart.ReleaseName) var cmd = exec.Command("helm", "delete", chart.ReleaseName, "--purge") out, err := cmd.CombinedOutput() if err != nil { Loading
go-apps/meep-virt-engine/helm/helm.go +2 −38 Original line number Diff line number Diff line Loading @@ -16,20 +16,6 @@ package helm import ( "fmt" log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" ) const ( StateIdle = "IDLE" StateInstalling = "INSTALLING" StateDeleting = "DELETING" ) var state string = StateIdle func GetReleasesName() ([]Release, error) { return getReleasesName() } Loading @@ -39,31 +25,9 @@ func GetReleases() ([]Release, error) { } func InstallCharts(charts []Chart) error { if state == StateIdle { state = StateInstalling go func() { log.Debug("Installing ", len(charts), " Charts...") _ = installCharts(charts) log.Debug("Charts installed (", len(charts), ")") state = StateIdle }() return nil } err := fmt.Errorf("Service busy [%s]", state) return err return runTask(Install, charts) } func DeleteReleases(charts []Chart) error { if state == StateIdle { state = StateDeleting go func() { log.Debug("Deleting ", len(charts), " Releases...") _ = deleteReleases(charts) log.Debug("Releases deleted (", len(charts), ")") state = StateIdle }() return nil } err := fmt.Errorf("Service busy [%s]", state) return err return runTask(Delete, charts) }
go-apps/meep-virt-engine/helm/install.go +35 −32 Original line number Diff line number Diff line Loading @@ -29,13 +29,18 @@ func installCharts(charts []Chart) error { if err != nil { return err } err = install(charts) for _, chart := range charts { err := install(chart) if err != nil { // Cleanup release log.Info("Cleaning installed releases") cleanReleases(charts) } return err } } return nil } func ensureReleases(charts []Chart) error { // ensure that releases do not already exist Loading @@ -52,32 +57,31 @@ func ensureReleases(charts []Chart) error { return nil } func install(charts []Chart) error { for _, c := range charts { func install(chart Chart) error { log.Debug("Installing chart: " + chart.ReleaseName) var cmd *exec.Cmd if strings.Trim(c.ValuesFile, " ") == "" { if strings.Trim(chart.ValuesFile, " ") == "" { cmd = exec.Command("helm", "install", "--name", c.ReleaseName, "--namespace", c.Namespace, "--set", "nameOverride="+c.Name, "--set", "fullnameOverride="+c.Name, c.Location, "--replace") "--name", chart.ReleaseName, "--namespace", chart.Namespace, "--set", "nameOverride="+chart.Name, "--set", "fullnameOverride="+chart.Name, chart.Location, "--replace") } else { cmd = exec.Command("helm", "install", "--name", c.ReleaseName, "--namespace", c.Namespace, "--set", "nameOverride="+c.Name, "--set", "fullnameOverride="+c.Name, "-f", c.ValuesFile, c.Location, "--replace") "--name", chart.ReleaseName, "--namespace", chart.Namespace, "--set", "nameOverride="+chart.Name, "--set", "fullnameOverride="+chart.Name, "-f", chart.ValuesFile, chart.Location, "--replace") } out, err := cmd.CombinedOutput() if err != nil { log.Error("Failed to install Release [" + c.ReleaseName + "] at " + c.Location) log.Error("Failed to install Release [" + chart.ReleaseName + "] at " + chart.Location) log.Error("Error(", err.Error(), "): ", string(out)) return err } } return nil } Loading @@ -85,7 +89,6 @@ func cleanReleases(charts []Chart) { var toClean []Chart var cnt int releases, _ := GetReleasesName() // ensure that releases do not exist for _, c := range charts { for _, r := range releases { Loading @@ -97,6 +100,6 @@ func cleanReleases(charts []Chart) { } if cnt > 0 { _ = DeleteReleases(toClean) _ = deleteReleases(toClean) } }
go-apps/meep-virt-engine/helm/worker.go 0 → 100644 +67 −0 Original line number Diff line number Diff line /* * Copyright (c) 2020 InterDigital Communications, Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package helm import ( log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger" ) type Task string const ( Install Task = "INSTALL" Delete Task = "DELETE" ) type Job struct { task Task charts []Chart } var queue *chan Job = nil func startWorker() { if queue != nil { return } queueChan := make(chan Job, 5) queue = &queueChan go func() { for job := range queueChan { switch job.task { case Install: log.Debug("Installing ", len(job.charts), " Charts...") _ = installCharts(job.charts) log.Debug("Charts installed (", len(job.charts), ")") case Delete: log.Debug("Deleting ", len(job.charts), " Releases...") _ = deleteReleases(job.charts) log.Debug("Releases deleted (", len(job.charts), ")") } } queue = nil }() } func runTask(task Task, charts []Chart) error { startWorker() var job Job = Job{task: task, charts: charts} *queue <- job return nil }