Loading go-apps/meepctl/cmd/delete.go +24 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package cmd import ( "fmt" "sync" "time" "github.com/InterDigitalInc/AdvantEDGE/go-apps/meepctl/utils" Loading Loading @@ -120,9 +121,23 @@ func deleteRun(cmd *cobra.Command, args []string) { } func deleteApps(apps []string, cobraCmd *cobra.Command) { var wg sync.WaitGroup var printMutex sync.Mutex for _, app := range apps { k8sDelete(app, cobraCmd) wg.Add(1) go func(appName string) { defer wg.Done() output := k8sDelete(appName, cobraCmd) if output != "" { printMutex.Lock() fmt.Print(output) printMutex.Unlock() } }(app) } wg.Wait() } // Delete a single dep app Loading @@ -146,14 +161,18 @@ func deleteSingleDepApp(app string, cobraCmd *cobra.Command) { k8sDelete(app, cobraCmd) } func k8sDelete(component string, cobraCmd *cobra.Command) { func k8sDelete(component string, cobraCmd *cobra.Command) string { var out string // If release exist exist, _ := utils.IsHelmRelease(component, cobraCmd) exist, outRel, _ := utils.IsHelmRelease(component, cobraCmd) out += outRel if exist { // Delete err := utils.HelmDelete(component, cobraCmd) outDel, err := utils.HelmDelete(component, cobraCmd) out += outDel if err != nil { fmt.Println("Helm delete failed with Error: ", err) out += fmt.Sprintf("Helm delete failed with Error: %v\n", err) } } return out } go-apps/meepctl/cmd/deploy.go +57 −14 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import ( "sort" "strconv" "strings" "sync" "time" "github.com/InterDigitalInc/AdvantEDGE/go-apps/meepctl/utils" Loading Loading @@ -310,13 +311,35 @@ func deployCore(cobraCmd *cobra.Command) { // Code coverage storage deployCodeCovStorage(cobraCmd) var wg sync.WaitGroup var printMutex sync.Mutex for _, app := range deployData.coreApps { deploySingleApp(app, cobraCmd) wg.Add(1) go func(appName string) { defer wg.Done() output := deploySingleApp(appName, cobraCmd) if output != "" { printMutex.Lock() fmt.Print(output) printMutex.Unlock() } }(app) } wg.Wait() } // Deploy a single core app func deploySingleApp(app string, cobraCmd *cobra.Command) { func deploySingleApp(app string, cobraCmd *cobra.Command) string { var out string force, _ := cobraCmd.Flags().GetBool("force") exist, outRel, _ := utils.IsHelmRelease(app, cobraCmd) out += outRel if exist && !force { out += fmt.Sprintf("%v\n", utils.FormatWarning("Skipping "+app+": already deployed -- use [-f, --force] flag to force deployment")) return out } chart := deployData.gitdir + "/" + utils.RepoCfg.GetString("repo.core.go-apps."+app+".chart") codecov := utils.RepoCfg.GetBool("repo.core.go-apps." + app + ".codecov") onboardedapp := utils.RepoCfg.GetBool("repo.core.go-apps." + app + ".onboardedapp") Loading Loading @@ -355,7 +378,8 @@ func deploySingleApp(app string, cobraCmd *cobra.Command) { coreFlags = utils.HelmFlags(coreFlags, "--set", "image.env.MEEP_HOST_URL=http://"+hostName) } k8sDeploy(app, chart, coreFlags, cobraCmd) out += k8sDeploy(app, chart, coreFlags, cobraCmd) return out } // Create CRDs Loading @@ -373,9 +397,17 @@ func createCRD(cobraCmd *cobra.Command) { // Deploy dependencies func deployDep(cobraCmd *cobra.Command) { for _, app := range deployData.depApps { force, _ := cobraCmd.Flags().GetBool("force") exist, outRel, _ := utils.IsHelmRelease(app, cobraCmd) fmt.Print(outRel) if exist && !force { fmt.Println(utils.FormatWarning("Skipping " + app + ": already deployed -- use [-f, --force] flag to force deployment")) continue } chart := deployData.gitdir + "/" + utils.RepoCfg.GetString("repo.dep."+app+".chart") flags := deployRunScriptsAndGetFlags(app, chart, cobraCmd) k8sDeploy(app, chart, flags, cobraCmd) fmt.Print(k8sDeploy(app, chart, flags, cobraCmd)) } } Loading @@ -397,9 +429,18 @@ func deploySingleDepApp(app string, cobraCmd *cobra.Command) { } return } force, _ := cobraCmd.Flags().GetBool("force") exist, outRel, _ := utils.IsHelmRelease(app, cobraCmd) fmt.Print(outRel) if exist && !force { fmt.Println(utils.FormatWarning("Skipping " + app + ": already deployed -- use [-f, --force] flag to force deployment")) return } chart := deployData.gitdir + "/" + utils.RepoCfg.GetString("repo.dep."+app+".chart") flags := deployRunScriptsAndGetFlags(app, chart, cobraCmd) k8sDeploy(app, chart, flags, cobraCmd) fmt.Print(k8sDeploy(app, chart, flags, cobraCmd)) } func deployRunScriptsAndGetFlags(targetName string, chart string, cobraCmd *cobra.Command) [][]string { Loading Loading @@ -786,25 +827,27 @@ func deployRunScriptsAndGetFlags(targetName string, chart string, cobraCmd *cobr return flags } func k8sDeploy(app string, chart string, flags [][]string, cobraCmd *cobra.Command) { func k8sDeploy(app string, chart string, flags [][]string, cobraCmd *cobra.Command) string { var out string force, _ := cobraCmd.Flags().GetBool("force") // If release exist && --force, delete exist, _ := utils.IsHelmRelease(app, cobraCmd) exist, outRel, _ := utils.IsHelmRelease(app, cobraCmd) out += outRel if exist { if force { _ = utils.HelmDelete(app, cobraCmd) // Wait for K8s to clean up resources before redeploying fmt.Println(utils.FormatWarning("Waiting 5s for resource cleanup...")) time.Sleep(10 * time.Second) outDel, _ := utils.HelmDelete(app, cobraCmd) out += outDel } else { fmt.Println(utils.FormatWarning("Skipping " + app + ": already deployed -- use [-f, --force] flag to force deployment")) return out += fmt.Sprintf("%v\n", utils.FormatWarning("Skipping "+app+": already deployed -- use [-f, --force] flag to force deployment")) return out } } // Deploy _ = utils.HelmInstall(app, chart, flags, cobraCmd) outIns, _ := utils.HelmInstall(app, chart, flags, cobraCmd) out += outIns return out } func deployCodeCovStorage(cobraCmd *cobra.Command) { Loading go-apps/meepctl/utils/helm.go +18 −20 Original line number Diff line number Diff line Loading @@ -27,20 +27,20 @@ import ( ) // IsHelmRelease Returns true if a Helm release exists func IsHelmRelease(name string, cobraCmd *cobra.Command) (exist bool, err error) { func IsHelmRelease(name string, cobraCmd *cobra.Command) (exist bool, output string, err error) { exist = false verbose, _ := cobraCmd.Flags().GetBool("verbose") start := time.Now() cmd := exec.Command("helm", "ls", "--filter", name, "--short") if verbose { fmt.Println("Cmd:", cmd.Args) output += fmt.Sprintf("Cmd: %v\n", cmd.Args) } out, err := cmd.CombinedOutput() elapsed := time.Since(start) if err != nil { err = errors.New("Error listing component [" + name + "]") fmt.Println(err) output += fmt.Sprintf("%v\n", err) } else { s := string(out) lines := strings.Split(s, "\n") Loading @@ -53,40 +53,38 @@ func IsHelmRelease(name string, cobraCmd *cobra.Command) (exist bool, err error) } if verbose { r := FormatResult("Result: "+string(out), elapsed, cobraCmd) fmt.Println(r) output += fmt.Sprintf("%v\n", r) } return exist, err return exist, output, err } // HelmDelete Deletes specified release func HelmDelete(name string, cobraCmd *cobra.Command) (err error) { func HelmDelete(name string, cobraCmd *cobra.Command) (output string, err error) { verbose, _ := cobraCmd.Flags().GetBool("verbose") start := time.Now() cmd := exec.Command("helm", "uninstall", name) cmd := exec.Command("helm", "uninstall", name, "--wait") if verbose { fmt.Println("Cmd:", cmd.Args) output += fmt.Sprintf("Cmd: %v\n", cmd.Args) } out, err := cmd.CombinedOutput() elapsed := time.Since(start) if err != nil { err = errors.New("Error deleting component [" + name + "]") fmt.Println(err) output += fmt.Sprintf("%v\n", err) } else { r := FormatResult("Deleted "+name, elapsed, cobraCmd) fmt.Println(r) output += fmt.Sprintf("%v\n", r) } if verbose { fmt.Println("Result: " + string(out)) output += fmt.Sprintf("Result: %v\n", string(out)) } return err return output, err } // HelmInstall Install specified releases func HelmInstall(name string, chart string, flags [][]string, cobraCmd *cobra.Command) (err error) { func HelmInstall(name string, chart string, flags [][]string, cobraCmd *cobra.Command) (output string, err error) { verbose, _ := cobraCmd.Flags().GetBool("verbose") start := time.Now() Loading @@ -96,21 +94,21 @@ func HelmInstall(name string, chart string, flags [][]string, cobraCmd *cobra.Co cmd.Args = append(cmd.Args, f[1]) } if verbose { fmt.Println("Cmd:", cmd.Args) output += fmt.Sprintf("Cmd: %v\n", cmd.Args) } out, err := cmd.CombinedOutput() elapsed := time.Since(start) if err != nil { err = errors.New("Error installing component [" + name + "]") fmt.Println(err) output += fmt.Sprintf("%v\n", err) } else { r := FormatResult("Deployed "+name, elapsed, cobraCmd) fmt.Println(r) output += fmt.Sprintf("%v\n", r) } if verbose { fmt.Println("Result: " + string(out)) output += fmt.Sprintf("Result: %v\n", string(out)) } return err return output, err } // HelmFlags Takes helm flag & value pair and formats it into an array of flag value pair Loading Loading
go-apps/meepctl/cmd/delete.go +24 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package cmd import ( "fmt" "sync" "time" "github.com/InterDigitalInc/AdvantEDGE/go-apps/meepctl/utils" Loading Loading @@ -120,9 +121,23 @@ func deleteRun(cmd *cobra.Command, args []string) { } func deleteApps(apps []string, cobraCmd *cobra.Command) { var wg sync.WaitGroup var printMutex sync.Mutex for _, app := range apps { k8sDelete(app, cobraCmd) wg.Add(1) go func(appName string) { defer wg.Done() output := k8sDelete(appName, cobraCmd) if output != "" { printMutex.Lock() fmt.Print(output) printMutex.Unlock() } }(app) } wg.Wait() } // Delete a single dep app Loading @@ -146,14 +161,18 @@ func deleteSingleDepApp(app string, cobraCmd *cobra.Command) { k8sDelete(app, cobraCmd) } func k8sDelete(component string, cobraCmd *cobra.Command) { func k8sDelete(component string, cobraCmd *cobra.Command) string { var out string // If release exist exist, _ := utils.IsHelmRelease(component, cobraCmd) exist, outRel, _ := utils.IsHelmRelease(component, cobraCmd) out += outRel if exist { // Delete err := utils.HelmDelete(component, cobraCmd) outDel, err := utils.HelmDelete(component, cobraCmd) out += outDel if err != nil { fmt.Println("Helm delete failed with Error: ", err) out += fmt.Sprintf("Helm delete failed with Error: %v\n", err) } } return out }
go-apps/meepctl/cmd/deploy.go +57 −14 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import ( "sort" "strconv" "strings" "sync" "time" "github.com/InterDigitalInc/AdvantEDGE/go-apps/meepctl/utils" Loading Loading @@ -310,13 +311,35 @@ func deployCore(cobraCmd *cobra.Command) { // Code coverage storage deployCodeCovStorage(cobraCmd) var wg sync.WaitGroup var printMutex sync.Mutex for _, app := range deployData.coreApps { deploySingleApp(app, cobraCmd) wg.Add(1) go func(appName string) { defer wg.Done() output := deploySingleApp(appName, cobraCmd) if output != "" { printMutex.Lock() fmt.Print(output) printMutex.Unlock() } }(app) } wg.Wait() } // Deploy a single core app func deploySingleApp(app string, cobraCmd *cobra.Command) { func deploySingleApp(app string, cobraCmd *cobra.Command) string { var out string force, _ := cobraCmd.Flags().GetBool("force") exist, outRel, _ := utils.IsHelmRelease(app, cobraCmd) out += outRel if exist && !force { out += fmt.Sprintf("%v\n", utils.FormatWarning("Skipping "+app+": already deployed -- use [-f, --force] flag to force deployment")) return out } chart := deployData.gitdir + "/" + utils.RepoCfg.GetString("repo.core.go-apps."+app+".chart") codecov := utils.RepoCfg.GetBool("repo.core.go-apps." + app + ".codecov") onboardedapp := utils.RepoCfg.GetBool("repo.core.go-apps." + app + ".onboardedapp") Loading Loading @@ -355,7 +378,8 @@ func deploySingleApp(app string, cobraCmd *cobra.Command) { coreFlags = utils.HelmFlags(coreFlags, "--set", "image.env.MEEP_HOST_URL=http://"+hostName) } k8sDeploy(app, chart, coreFlags, cobraCmd) out += k8sDeploy(app, chart, coreFlags, cobraCmd) return out } // Create CRDs Loading @@ -373,9 +397,17 @@ func createCRD(cobraCmd *cobra.Command) { // Deploy dependencies func deployDep(cobraCmd *cobra.Command) { for _, app := range deployData.depApps { force, _ := cobraCmd.Flags().GetBool("force") exist, outRel, _ := utils.IsHelmRelease(app, cobraCmd) fmt.Print(outRel) if exist && !force { fmt.Println(utils.FormatWarning("Skipping " + app + ": already deployed -- use [-f, --force] flag to force deployment")) continue } chart := deployData.gitdir + "/" + utils.RepoCfg.GetString("repo.dep."+app+".chart") flags := deployRunScriptsAndGetFlags(app, chart, cobraCmd) k8sDeploy(app, chart, flags, cobraCmd) fmt.Print(k8sDeploy(app, chart, flags, cobraCmd)) } } Loading @@ -397,9 +429,18 @@ func deploySingleDepApp(app string, cobraCmd *cobra.Command) { } return } force, _ := cobraCmd.Flags().GetBool("force") exist, outRel, _ := utils.IsHelmRelease(app, cobraCmd) fmt.Print(outRel) if exist && !force { fmt.Println(utils.FormatWarning("Skipping " + app + ": already deployed -- use [-f, --force] flag to force deployment")) return } chart := deployData.gitdir + "/" + utils.RepoCfg.GetString("repo.dep."+app+".chart") flags := deployRunScriptsAndGetFlags(app, chart, cobraCmd) k8sDeploy(app, chart, flags, cobraCmd) fmt.Print(k8sDeploy(app, chart, flags, cobraCmd)) } func deployRunScriptsAndGetFlags(targetName string, chart string, cobraCmd *cobra.Command) [][]string { Loading Loading @@ -786,25 +827,27 @@ func deployRunScriptsAndGetFlags(targetName string, chart string, cobraCmd *cobr return flags } func k8sDeploy(app string, chart string, flags [][]string, cobraCmd *cobra.Command) { func k8sDeploy(app string, chart string, flags [][]string, cobraCmd *cobra.Command) string { var out string force, _ := cobraCmd.Flags().GetBool("force") // If release exist && --force, delete exist, _ := utils.IsHelmRelease(app, cobraCmd) exist, outRel, _ := utils.IsHelmRelease(app, cobraCmd) out += outRel if exist { if force { _ = utils.HelmDelete(app, cobraCmd) // Wait for K8s to clean up resources before redeploying fmt.Println(utils.FormatWarning("Waiting 5s for resource cleanup...")) time.Sleep(10 * time.Second) outDel, _ := utils.HelmDelete(app, cobraCmd) out += outDel } else { fmt.Println(utils.FormatWarning("Skipping " + app + ": already deployed -- use [-f, --force] flag to force deployment")) return out += fmt.Sprintf("%v\n", utils.FormatWarning("Skipping "+app+": already deployed -- use [-f, --force] flag to force deployment")) return out } } // Deploy _ = utils.HelmInstall(app, chart, flags, cobraCmd) outIns, _ := utils.HelmInstall(app, chart, flags, cobraCmd) out += outIns return out } func deployCodeCovStorage(cobraCmd *cobra.Command) { Loading
go-apps/meepctl/utils/helm.go +18 −20 Original line number Diff line number Diff line Loading @@ -27,20 +27,20 @@ import ( ) // IsHelmRelease Returns true if a Helm release exists func IsHelmRelease(name string, cobraCmd *cobra.Command) (exist bool, err error) { func IsHelmRelease(name string, cobraCmd *cobra.Command) (exist bool, output string, err error) { exist = false verbose, _ := cobraCmd.Flags().GetBool("verbose") start := time.Now() cmd := exec.Command("helm", "ls", "--filter", name, "--short") if verbose { fmt.Println("Cmd:", cmd.Args) output += fmt.Sprintf("Cmd: %v\n", cmd.Args) } out, err := cmd.CombinedOutput() elapsed := time.Since(start) if err != nil { err = errors.New("Error listing component [" + name + "]") fmt.Println(err) output += fmt.Sprintf("%v\n", err) } else { s := string(out) lines := strings.Split(s, "\n") Loading @@ -53,40 +53,38 @@ func IsHelmRelease(name string, cobraCmd *cobra.Command) (exist bool, err error) } if verbose { r := FormatResult("Result: "+string(out), elapsed, cobraCmd) fmt.Println(r) output += fmt.Sprintf("%v\n", r) } return exist, err return exist, output, err } // HelmDelete Deletes specified release func HelmDelete(name string, cobraCmd *cobra.Command) (err error) { func HelmDelete(name string, cobraCmd *cobra.Command) (output string, err error) { verbose, _ := cobraCmd.Flags().GetBool("verbose") start := time.Now() cmd := exec.Command("helm", "uninstall", name) cmd := exec.Command("helm", "uninstall", name, "--wait") if verbose { fmt.Println("Cmd:", cmd.Args) output += fmt.Sprintf("Cmd: %v\n", cmd.Args) } out, err := cmd.CombinedOutput() elapsed := time.Since(start) if err != nil { err = errors.New("Error deleting component [" + name + "]") fmt.Println(err) output += fmt.Sprintf("%v\n", err) } else { r := FormatResult("Deleted "+name, elapsed, cobraCmd) fmt.Println(r) output += fmt.Sprintf("%v\n", r) } if verbose { fmt.Println("Result: " + string(out)) output += fmt.Sprintf("Result: %v\n", string(out)) } return err return output, err } // HelmInstall Install specified releases func HelmInstall(name string, chart string, flags [][]string, cobraCmd *cobra.Command) (err error) { func HelmInstall(name string, chart string, flags [][]string, cobraCmd *cobra.Command) (output string, err error) { verbose, _ := cobraCmd.Flags().GetBool("verbose") start := time.Now() Loading @@ -96,21 +94,21 @@ func HelmInstall(name string, chart string, flags [][]string, cobraCmd *cobra.Co cmd.Args = append(cmd.Args, f[1]) } if verbose { fmt.Println("Cmd:", cmd.Args) output += fmt.Sprintf("Cmd: %v\n", cmd.Args) } out, err := cmd.CombinedOutput() elapsed := time.Since(start) if err != nil { err = errors.New("Error installing component [" + name + "]") fmt.Println(err) output += fmt.Sprintf("%v\n", err) } else { r := FormatResult("Deployed "+name, elapsed, cobraCmd) fmt.Println(r) output += fmt.Sprintf("%v\n", r) } if verbose { fmt.Println("Result: " + string(out)) output += fmt.Sprintf("Result: %v\n", string(out)) } return err return output, err } // HelmFlags Takes helm flag & value pair and formats it into an array of flag value pair Loading