Commit 106cc779 authored by Kevin Di Lallo's avatar Kevin Di Lallo
Browse files

meepctl config file sandboxing + restructure

parent 58236e91
Loading
Loading
Loading
Loading
+205 −189
Original line number Diff line number Diff line
@@ -15,68 +15,93 @@
version: 1.4.2
repo:
  name: AdvantEDGE

  #------------------------------
  #  Core Subsystem
  #------------------------------
  core:
    meep-user:
      service-account: charts/meep-user/meep-user-serviceaccount.yaml
      cluster-role-binding: charts/meep-user/meep-user-clusterrolebinding.yaml

    # Go Applications
    go-apps:
      meep-ctrl-engine:
        src: go-apps/meep-ctrl-engine
        bin: bin/meep-ctrl-engine
        chart: charts/meep-ctrl-engine
        codecov: true
        lint: true
        api: go-apps/meep-ctrl-engine/api/swagger.yaml
        docker-data:
          api: bin/meep-swagger-ui
          static: bin/meep-frontend
      meep-mon-engine:
        src: go-apps/meep-mon-engine
        bin: bin/meep-mon-engine
        chart: charts/meep-mon-engine
        build-flags:
          - -mod=vendor
        codecov: true
        lint: true
      meep-virt-engine:
        src: go-apps/meep-virt-engine
        bin: bin/meep-virt-engine
        chart: charts/meep-virt-engine
        codecov: true
        lint: true
        docker-data:
          data: go-apps/meep-virt-engine/docker-data
      meep-webhook:
        src: go-apps/meep-webhook
        bin: bin/meep-webhook
        chart: charts/meep-webhook
        build-flags:
          - -mod=vendor
        codecov: false
      lint: false
        lint: true

    # CORE APPS (JS)
    # Javascript Applications
    js-apps:
      meep-frontend:
        src: js-apps/meep-frontend
        bin: bin/meep-frontend
      codecov: false
        lint: true
        local-deps:
          meep-ctrl-engine-api: js-packages/meep-ctrl-engine-client
      meep-swagger-ui:
        src: js-apps/meep-swagger-ui
        bin: bin/meep-swagger-ui
      codecov: false
        lint: false
        api-bundle:
        - meep-ctrl-engine
        - meep-metrics-engine
        - meep-metrics-engine-notification-client
        - meep-mg-manager
        - meep-mg-app-client
          - core.go-apps.meep-ctrl-engine
          - sandbox.go-apps.meep-loc-serv
          - sandbox.go-apps.meep-metrics-engine
          - sandbox.go-apps.meep-mg-manager
          - packages.go-packages.meep-loc-serv-notification-client
          - packages.go-packages.meep-metrics-engine-notification-client
          - packages.go-packages.meep-mg-app-client
          - meep-rnis
          - meep-rnis-notification-client
        - meep-loc-serv
        - meep-loc-serv-notification-client

    # CORE APPS (GO)
    meep-ctrl-engine:
      src: go-apps/meep-ctrl-engine
      bin: bin/meep-ctrl-engine
      chart: charts/meep-ctrl-engine
      codecov: true
      lint: true
      nodeport: 30000
      api: go-apps/meep-ctrl-engine/api/swagger.yaml
      docker-data:
        api: bin/meep-swagger-ui
        static: bin/meep-frontend
    meep-rnis:
      src: go-apps/meep-rnis
      bin: bin/meep-rnis
      chart: charts/meep-rnis
      build-flags:
        - -mod=vendor
      codecov: true
      lint: true
      nodeport: 30017
      api: go-apps/meep-rnis/api/swagger.yaml
    # Kubernetes Objects
    k8s:
      meep-user:
        service-account: charts/meep-user/meep-user-serviceaccount.yaml
        cluster-role-binding: charts/meep-user/meep-user-clusterrolebinding.yaml

  #------------------------------
  #  Sandbox Subsystem
  #------------------------------
  sandbox:

    # Go Applications
    go-apps:
      meep-loc-serv:
        src: go-apps/meep-loc-serv
        bin: bin/meep-loc-serv
        chart: charts/meep-loc-serv
        build-flags:
          - -mod=vendor
      codecov: true
        codecov: false
        lint: true
      nodeport: 30007
        api: go-apps/meep-loc-serv/api/swagger.yaml
      meep-metrics-engine:
        src: go-apps/meep-metrics-engine
@@ -84,63 +109,63 @@ repo:
        chart: charts/meep-metrics-engine
        build-flags:
          - -mod=vendor
      codecov: true
        codecov: false
        lint: true
      nodeport: 30008
        api: go-apps/meep-metrics-engine/api/v2/swagger.yaml
      meep-mg-manager:
        src: go-apps/meep-mg-manager
        bin: bin/meep-mg-manager
        chart: charts/meep-mg-manager
      codecov: true
        codecov: false
        lint: true
      nodeport: 30005
        api: go-apps/meep-mg-manager/api/swagger.yaml
    meep-mon-engine:
      src: go-apps/meep-mon-engine
      bin: bin/meep-mon-engine
      chart: charts/meep-mon-engine
      meep-rnis:
        src: go-apps/meep-rnis
        bin: bin/meep-rnis
        chart: charts/meep-rnis
        build-flags:
          - -mod=vendor
      codecov: true
        codecov: false
        lint: true
        api: go-apps/meep-rnis/api/swagger.yaml
      meep-tc-engine:
        src: go-apps/meep-tc-engine
        bin: bin/meep-tc-engine
        chart: charts/meep-tc-engine
      codecov: true
        codecov: false
        lint: true
      meep-tc-sidecar:
        src: go-apps/meep-tc-sidecar
        bin: bin/meep-tc-sidecar
        codecov: false
        lint: true
    meep-virt-engine:
      src: go-apps/meep-virt-engine
      bin: bin/meep-virt-engine
      chart: charts/meep-virt-engine
      codecov: true
      lint: true
      docker-data:
        data: go-apps/meep-virt-engine/docker-data
    meep-webhook:
      src: go-apps/meep-webhook
      bin: bin/meep-webhook
      chart: charts/meep-webhook
      build-flags:
        - -mod=vendor
      codecov: false
      lint: true

    # # CORE PACKAGES (JS)
    # meep-ctrl-engine-client:
    #   src: js-packages/meep-ctrl-engine-client
    #   lint: false
    # meep-metrics-engine-client:
    #   src: js-packages/meep-metrics-engine-client
    #   lint: false
  #------------------------------
  #  Dependencies
  #------------------------------
  dep:
    meep-couchdb:
      chart: charts/couchdb
    meep-docker-registry:
      chart: charts/docker-registry
    meep-grafana:
      chart: charts/grafana
    meep-influxdb:
      chart: charts/influxdb
    meep-kube-state-metrics:
      chart: charts/kube-state-metrics
    meep-ingress:
      chart: charts/nginx-ingress
    meep-redis:
      chart: charts/redis

  #------------------------------
  #  Packages
  #------------------------------
  packages:

    # CORE PACKAGES (GO)
    # Go Packages
    go-packages:
      meep-couch:
        src: go-packages/meep-couch
        lint: true
@@ -150,13 +175,6 @@ repo:
      meep-ctrl-engine-model:
        src: go-packages/meep-ctrl-engine-model
        lint: true
    meep-rnis-client:
      src: go-packages/meep-rnis-client
      lint: false
    meep-rnis-notification-client:
      src: go-packages/meep-rnis-notification-client
      lint: false
      api: go-packages/meep-rnis-notification-client/api/swagger.yaml
      meep-loc-serv-client:
        src: go-packages/meep-loc-serv-client
        lint: false
@@ -167,9 +185,6 @@ repo:
      meep-logger:
        src: go-packages/meep-logger
        lint: true
    meep-http-logger:
      src: go-packages/meep-http-logger
      lint: true
      meep-metric-store:
        src: go-packages/meep-metric-store
        lint: true
@@ -199,21 +214,22 @@ repo:
      meep-replay-manager:
        src: go-packages/meep-replay-manager
        lint: true
      meep-rnis-client:
        src: go-packages/meep-rnis-client
        lint: false
      meep-rnis-notification-client:
        src: go-packages/meep-rnis-notification-client
        lint: false
        api: go-packages/meep-rnis-notification-client/api/swagger.yaml
      meep-watchdog:
        src: go-packages/meep-watchdog
        lint: true
  dep:
    couchdb:
      chart: charts/couchdb
    docker-registry:
      chart: charts/docker-registry
    grafana:
      chart: charts/grafana
    influxdb:
      chart: charts/influxdb
    kube-state-metrics:
      chart: charts/kube-state-metrics
    nginx-ingress:
      chart: charts/nginx-ingress
    redis:
      chart: charts/redis

    # Javascript Packages
    js-packages:
      meep-ctrl-engine-client:
        src: js-packages/meep-ctrl-engine-client
        lint: false
      meep-metrics-engine-client:
        src: js-packages/meep-metrics-engine-client
        lint: false
+134 −95
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import (
	"fmt"
	"os"
	"os/exec"
	"sort"
	"strings"
	"time"

@@ -29,28 +30,65 @@ import (
	"github.com/spf13/cobra"
)

var buildCodecov bool
var buildNolint bool
type BuildData struct {
	codecov       bool
	nolint        bool
	coreGoApps    []string
	coreJsApps    []string
	sandboxGoApps []string
}

// buildCmd represents the build command
var buildCmd = &cobra.Command{
	Use:   "build <targets>",
	Short: "Build core components",
	Long: `AdvantEDGE is composed of a collection of micro-services.
const buildDesc = `AdvantEDGE is composed of a collection of micro-services.

Build command generates AdvantEDGE binaries.
Multiple targets can be specified (e.g. meepctl build <target1> <target2>...)
Multiple targets can be specified (e.g. meepctl build <target1> <target2>...)`

Valid targets:`,
	Example: `  # Build all components
const buildExample = `  # Build all components
  meepctl build all
  # Build meep-ctrl-engine component only
  meepctl build meep-ctrl-engine`,
  meepctl build meep-ctrl-engine`

// buildCmd represents the build command
var buildCmd = &cobra.Command{
	Use:       "build <targets>",
	Short:     "Build core components",
	Long:      buildDesc,
	Example:   buildExample,
	Args:      cobra.OnlyValidArgs,
	// WARNING -- meep-frontend comes before meep-ctrl-engine so that "all" works
	ValidArgs: []string{"all", "meep-frontend", "meep-ctrl-engine", "meep-virt-engine", "meep-swagger-ui", "meep-webhook", "meep-mg-manager", "meep-mon-engine", "meep-rnis", "meep-loc-serv", "meep-metrics-engine", "meep-tc-engine", "meep-tc-sidecar"},
	ValidArgs: nil,
	Run:       buildRun,
}

	Run: func(cmd *cobra.Command, args []string) {
var buildData BuildData

func init() {
	// Get targets from repo config file
	buildData.coreGoApps = utils.GetTargets("repo.core.go-apps")
	buildData.coreJsApps = utils.GetTargets("repo.core.js-apps")
	buildData.sandboxGoApps = utils.GetTargets("repo.sandbox.go-apps")

	// Create the list of valid arguments
	baseArgs := []string{"all"}
	configArgs := append(buildData.coreGoApps, buildData.coreJsApps...)
	configArgs = append(configArgs, buildData.sandboxGoApps...)
	sort.Strings(configArgs)
	buildCmd.ValidArgs = append(baseArgs, configArgs...)

	// Add list of arguments to Example usage
	buildCmd.Example += "\n\nValid Targets:"
	for _, arg := range buildCmd.ValidArgs {
		buildCmd.Example += "\n  * " + arg
	}

	// Set build-specific flags
	buildCmd.Flags().BoolVar(&buildData.codecov, "codecov", false, "Build a code coverage binary (dev. option)")
	buildCmd.Flags().BoolVar(&buildData.nolint, "nolint", false, "Disable linting")

	// Add command
	rootCmd.AddCommand(buildCmd)
}

func buildRun(cmd *cobra.Command, args []string) {
	if !utils.ConfigValidate("") {
		fmt.Println("Fix configuration issues")
		return
@@ -58,7 +96,8 @@ Valid targets:`,

	targets := args
	if len(targets) == 0 {
			fmt.Println("Need to specify at least one target from ", cmd.ValidArgs)
		fmt.Println("Error: Need to specify at least one target")
		_ = cmd.Usage()
		os.Exit(0)
	}

@@ -68,7 +107,8 @@ Valid targets:`,
	if v {
		fmt.Println("Build called")
		fmt.Println("[arg]  targets:", targets)
			fmt.Println("[flag] codecov:", buildCodecov)
		fmt.Println("[flag] codecov:", buildData.codecov)
		fmt.Println("[flag] nolint:", buildData.nolint)
		fmt.Println("[flag] verbose:", v)
		fmt.Println("[flag] time:", t)
	}
@@ -85,66 +125,64 @@ Valid targets:`,
	if t {
		fmt.Println("Took ", elapsed.Round(time.Millisecond).String())
	}
	},
}

func init() {
	var argsStr string
	for _, arg := range buildCmd.ValidArgs {
		argsStr += "\n  * " + arg
	}
	buildCmd.Long += argsStr

	rootCmd.AddCommand(buildCmd)

	// Here you will define your flags and configuration settings.

	// Cobra supports Persistent Flags which will work for this command
	// and all subcommands, e.g.:
	// buildCmd.PersistentFlags().String("foo", "", "A help for foo")

	// Cobra supports local flags which will only run when this command
	// is called directly, e.g.:
	// buildCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
	buildCmd.Flags().BoolVar(&buildCodecov, "codecov", false, "Build a code coverage binary (dev. option)")
	buildCmd.Flags().BoolVar(&buildNolint, "nolint", false, "Disable linting")
}

func buildAll(cobraCmd *cobra.Command) {
	for _, target := range cobraCmd.ValidArgs {
		if target == "all" {
			continue
	for _, target := range buildData.coreGoApps {
		buildGoApp(target, "repo.core.go-apps.", cobraCmd)
		fmt.Println("")
	}
		build(target, cobraCmd)
	for _, target := range buildData.coreJsApps {
		buildJsApp(target, "repo.core.js-apps.", cobraCmd)
		fmt.Println("")
	}
	for _, target := range buildData.sandboxGoApps {
		buildGoApp(target, "repo.sandbox.go-apps.", cobraCmd)
		fmt.Println("")
	}
}

func build(targetName string, cobraCmd *cobra.Command) {
	target := utils.RepoCfg.GetStringMapString("repo.core." + targetName)
	if len(target) == 0 {
		fmt.Println("Invalid target:", targetName)
	for _, target := range buildData.coreGoApps {
		if target == targetName {
			buildGoApp(target, "repo.core.go-apps.", cobraCmd)
			return
		}
	}
	for _, target := range buildData.coreJsApps {
		if target == targetName {
			buildJsApp(target, "repo.core.js-apps.", cobraCmd)
			return
		}
	}
	for _, target := range buildData.sandboxGoApps {
		if target == targetName {
			buildGoApp(target, "repo.sandbox.go-apps.", cobraCmd)
			return
		}
	}
	fmt.Println("Error: Unsupported target: ", targetName)
}

func buildJsApp(targetName string, repo string, cobraCmd *cobra.Command) {
	switch targetName {
	case "meep-frontend":
		buildFrontend(targetName, cobraCmd)
		buildFrontend(targetName, repo, cobraCmd)
	case "meep-swagger-ui":
		buildSwaggerUi(targetName, cobraCmd)
		buildSwaggerUi(targetName, repo, cobraCmd)
	default:
		buildGoApp(targetName, cobraCmd)
		fmt.Println("Error: Unsupported JS App: ", targetName)
	}
}

func buildFrontend(targetName string, cobraCmd *cobra.Command) {
func buildFrontend(targetName string, repo string, cobraCmd *cobra.Command) {
	fmt.Println("--", targetName, "--")
	target := utils.RepoCfg.GetStringMapString("repo.core." + targetName)
	target := utils.RepoCfg.GetStringMapString(repo + targetName)
	version := utils.RepoCfg.GetString("version")
	gitDir := viper.GetString("meep.gitdir")
	srcDir := gitDir + "/" + target["src"]
	binDir := gitDir + "/" + target["bin"]
	lintEnabled := utils.RepoCfg.GetBool("repo.core." + targetName + ".lint")
	lintEnabled := utils.RepoCfg.GetBool(repo + targetName + ".lint")

	// dependencies
	fmt.Println("   + checking external dependencies")
@@ -156,7 +194,7 @@ func buildFrontend(targetName string, cobraCmd *cobra.Command) {
		fmt.Println(out)
	}

	locDeps := utils.RepoCfg.GetStringMapString("repo.core." + targetName + ".local-deps")
	locDeps := utils.RepoCfg.GetStringMapString(repo + targetName + ".local-deps")
	if len(locDeps) > 0 {
		fmt.Println("   + checking local dependencies")
		for dep, depDir := range locDeps {
@@ -183,7 +221,7 @@ func buildFrontend(targetName string, cobraCmd *cobra.Command) {
	}

	// linter: ESLint
	if lintEnabled && !buildNolint {
	if lintEnabled && !buildData.nolint {
		fmt.Println("   + running linter")
		cmd := exec.Command("eslint", "src/js/")
		cmd.Dir = srcDir
@@ -208,12 +246,13 @@ func buildFrontend(targetName string, cobraCmd *cobra.Command) {
	}
}

func buildSwaggerUi(targetName string, cobraCmd *cobra.Command) {
func buildSwaggerUi(targetName string, repo string, cobraCmd *cobra.Command) {
	fmt.Println("--", targetName, "--")
	fmt.Println("   + creating api files")

	verbose, _ := cobraCmd.Flags().GetBool("verbose")
	target := utils.RepoCfg.GetStringMapString("repo.core." + targetName)
	target := utils.RepoCfg.GetStringMapString(repo + targetName)
	apiBundle := utils.RepoCfg.GetStringSlice(repo + targetName + ".api-bundle")
	gitDir := viper.GetString("meep.gitdir")
	srcDir := gitDir + "/" + target["src"]
	binDir := gitDir + "/" + target["bin"]
@@ -244,16 +283,16 @@ func buildSwaggerUi(targetName string, cobraCmd *cobra.Command) {
	urls := " [ "
	urlStringToReplace := `url: "https:\/\/petstore.swagger.io\/v2\/swagger.json",`

	apiBundle := utils.RepoCfg.GetStringSlice("repo.core.meep-swagger-ui.api-bundle")
	//find all the apis and copy them at the location above
	for _, target := range apiBundle {
		apiSrcFile := utils.RepoCfg.GetString("repo.core." + target + ".api")
		apiSrcFile := utils.RepoCfg.GetString("repo." + target + ".api")
		if apiSrcFile == "" {
			continue
		}
		apiSrcPath := gitDir + "/" + apiSrcFile
		if apiSrcPath != "" {
			apiDstPath := binDir + "/" + target + "-api.yaml"
			name := target[strings.LastIndex(target, ".")+1:]
			apiDstPath := binDir + "/" + name + "-api.yaml"
			if verbose {
				fmt.Println("    Copying: " + apiSrcPath + " --> " + apiDstPath)
			}
@@ -286,7 +325,7 @@ func buildSwaggerUi(targetName string, cobraCmd *cobra.Command) {
			}

			//update urls for swagger-ui index file
			urls = urls + `{"name": "` + title + `", "url": "` + target + `-api.yaml"},`
			urls = urls + `{"name": "` + title + `", "url": "` + name + `-api.yaml"},`
		}
	}

@@ -301,14 +340,14 @@ func buildSwaggerUi(targetName string, cobraCmd *cobra.Command) {
	}
}

func buildGoApp(targetName string, cobraCmd *cobra.Command) {
func buildGoApp(targetName string, repo string, cobraCmd *cobra.Command) {
	fmt.Println("--", targetName, "--")
	target := utils.RepoCfg.GetStringMapString("repo.core." + targetName)
	target := utils.RepoCfg.GetStringMapString(repo + targetName)
	gitDir := viper.GetString("meep.gitdir")
	srcDir := gitDir + "/" + target["src"]
	binDir := gitDir + "/" + target["bin"]
	codecovCapable := utils.RepoCfg.GetBool("repo.core." + targetName + ".codecov")
	lintEnabled := utils.RepoCfg.GetBool("repo.core." + targetName + ".lint")
	codecovCapable := utils.RepoCfg.GetBool(repo + targetName + ".codecov")
	lintEnabled := utils.RepoCfg.GetBool(repo + targetName + ".lint")

	// dependencies
	fmt.Println("   + checking external dependencies")
@@ -321,7 +360,7 @@ func buildGoApp(targetName string, cobraCmd *cobra.Command) {
	}

	// linter: goloangci-lint
	if lintEnabled && !buildNolint {
	if lintEnabled && !buildData.nolint {
		fmt.Println("   + running linter")
		cmd := exec.Command("golangci-lint", "run")
		cmd.Dir = srcDir
@@ -338,11 +377,11 @@ func buildGoApp(targetName string, cobraCmd *cobra.Command) {
	// for go, local dependencies are handled via the Go toolchain so nothing to do

	// Remove unnecessary deps
	fixDeps(targetName, cobraCmd)
	fixDeps(targetName, repo, cobraCmd)

	// build
	buildFlags := utils.RepoCfg.GetStringSlice("repo.core." + targetName + ".build-flags")
	if buildCodecov && codecovCapable {
	buildFlags := utils.RepoCfg.GetStringSlice(repo + targetName + ".build-flags")
	if buildData.codecov && codecovCapable {
		fmt.Println("   + building " + targetName + " (warning: development build - code coverage)")
		args := []string{"test", "-covermode=count", "-coverpkg=./...", "-c"}
		args = append(args, buildFlags...)
@@ -372,8 +411,8 @@ func buildGoApp(targetName string, cobraCmd *cobra.Command) {
	}
}

func fixDeps(targetName string, cobraCmd *cobra.Command) {
	target := utils.RepoCfg.GetStringMapString("repo.core." + targetName)
func fixDeps(targetName string, repo string, cobraCmd *cobra.Command) {
	target := utils.RepoCfg.GetStringMapString(repo + targetName)
	gitDir := viper.GetString("meep.gitdir")
	srcDir := gitDir + "/" + target["src"]

+81 −94
Original line number Diff line number Diff line
@@ -27,26 +27,54 @@ import (
	"github.com/spf13/cobra"
)

// deleteCmd represents the delete command
var deleteCmd = &cobra.Command{
	Use:   "delete <group>",
	Short: "Delete containers from the K8s cluster",
	Long: `Delete containers from the K8s cluster
type DeleteData struct {
	coreApps []string
	depApps  []string
}

const deleteDesc = `Delete containers from the K8s cluster

AdvantEDGE is composed of a collection of micro-services (a.k.a the groups).

Delete command removes a group of containers from the K8s cluster.
Delete command removes a group of containers from the K8s cluster.`

Valid groups:
  * core: AdvantEDGE core containers
  * dep:  Dependency containers`,
	Example: `  # Delete dependency containers
const deleteExample = `  # Delete dependency containers
  meepctl delete dep
  # Delete only AdvantEDGE core containers
  meepctl delete core`,
  meepctl delete core`

// deleteCmd represents the delete command
var deleteCmd = &cobra.Command{
	Use:       "delete <group>",
	Short:     "Delete containers from the K8s cluster",
	Long:      deleteDesc,
	Example:   deleteExample,
	Args:      cobra.ExactValidArgs(1),
	ValidArgs: []string{"dep", "core"},
	Run: func(cmd *cobra.Command, args []string) {
	ValidArgs: nil,
	Run:       deleteRun,
}

var deleteData DeleteData

func init() {
	// Get targets from repo config file
	deleteData.coreApps = utils.GetTargets("repo.core.go-apps")
	deleteData.depApps = utils.GetTargets("repo.dep")

	// Configure the list of valid arguments
	deleteCmd.ValidArgs = []string{"dep", "core"}

	// Add list of arguments to Example usage
	deleteCmd.Example += "\n\nValid Targets:"
	for _, arg := range deleteCmd.ValidArgs {
		deleteCmd.Example += "\n  * " + arg
	}

	// Add command
	rootCmd.AddCommand(deleteCmd)
}

func deleteRun(cmd *cobra.Command, args []string) {
	if !utils.ConfigValidate("") {
		fmt.Println("Fix configuration issues")
		return
@@ -64,100 +92,59 @@ Valid groups:

	start := time.Now()
	if group == "core" {
			deleteCore(cmd)
		deleteApps(deleteData.coreApps, cmd)
		deleteMeepUserAccount(cmd)

	} else if group == "dep" {
			deleteDep(cmd)
		deleteApps(deleteData.depApps, cmd)
	}

	elapsed := time.Since(start)
	if t {
		fmt.Println("Took ", elapsed.Round(time.Millisecond).String())
	}
	},
}

func deleteCore(cobraCmd *cobra.Command) {

func deleteApps(apps []string, cobraCmd *cobra.Command) {
	messages := make(chan string)
	for _, app := range apps {
		go k8sDelete(app, cobraCmd, messages)
	}

	go k8sDelete("meep-virt-engine", cobraCmd, messages)
	go k8sDelete("meep-webhook", cobraCmd, messages)
	go k8sDelete("meep-mg-manager", cobraCmd, messages)
	go k8sDelete("meep-tc-engine", cobraCmd, messages)
	go k8sDelete("meep-mon-engine", cobraCmd, messages)
	go k8sDelete("meep-loc-serv", cobraCmd, messages)
	go k8sDelete("meep-rnis", cobraCmd, messages)
	go k8sDelete("meep-metrics-engine", cobraCmd, messages)
	go k8sDelete("meep-ctrl-engine", cobraCmd, messages)
	deleteMeepUserAccount(cobraCmd)

	for i := 0; i < 8; i++ {
	for i := 0; i < len(apps); i++ {
		fmt.Println(<-messages)
	}
}

func k8sDelete(component string, cobraCmd *cobra.Command, messages chan string) {
	// If release exist
	exist, _ := utils.IsHelmRelease(component, cobraCmd)
	if exist {
		// Delete
		err := utils.HelmDelete(component, cobraCmd)
		if err != nil {
			fmt.Println("Helm delete failed with Error: ", err)
		}
		messages <- "Deleted " + component
	} else {
		messages <- "Missing " + component
	}
}

func deleteMeepUserAccount(cobraCmd *cobra.Command) {
	gitdir := viper.GetString("meep.gitdir")

	cmd := exec.Command("kubectl", "delete", "-f", gitdir+"/"+utils.RepoCfg.GetString("repo.core.meep-user.service-account"))
	cmd := exec.Command("kubectl", "delete", "-f", gitdir+"/"+utils.RepoCfg.GetString("repo.core.k8s.meep-user.service-account"))
	out, err := utils.ExecuteCmd(cmd, cobraCmd)
	if err != nil {
		fmt.Println("Error:", err)
		fmt.Println(out)
	}

	cmd = exec.Command("kubectl", "delete", "-f", gitdir+"/"+utils.RepoCfg.GetString("repo.core.meep-user.cluster-role-binding"))
	cmd = exec.Command("kubectl", "delete", "-f", gitdir+"/"+utils.RepoCfg.GetString("repo.core.k8s.meep-user.cluster-role-binding"))
	out, err = utils.ExecuteCmd(cmd, cobraCmd)
	if err != nil {
		fmt.Println("Error:", err)
		fmt.Println(out)
	}
}

func deleteDep(cobraCmd *cobra.Command) {
	// Local storage bindings
	// NOTE: Helm charts don't remove pvc for statefulsets because helm did not create them
	// Run in separate threads in order to complete uninstall successfully
	messages := make(chan string)
	go k8sDelete("meep-redis", cobraCmd, messages)
	go k8sDelete("meep-couchdb", cobraCmd, messages)
	go k8sDelete("meep-grafana", cobraCmd, messages)
	go k8sDelete("meep-influxdb", cobraCmd, messages)
	go k8sDelete("meep-kube-state-metrics", cobraCmd, messages)
	go k8sDelete("meep-docker-registry", cobraCmd, messages)
	go k8sDelete("meep-ingress", cobraCmd, messages)

	// Wait for all pvc delete routines to complete
	for i := 0; i < 7; i++ {
		fmt.Println(<-messages)
	}
}

func init() {
	rootCmd.AddCommand(deleteCmd)

	// Here you will define your flags and configuration settings.

	// Cobra supports Persistent Flags which will work for this command
	// and all subcommands, e.g.:
	// deleteCmd.PersistentFlags().String("foo", "", "A help for foo")

	// Cobra supports local flags which will only run when this command
	// is called directly, e.g.:
	// deleteCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}

func k8sDelete(component string, cobraCmd *cobra.Command, messages chan string) {
	// If release exist
	exist, _ := utils.IsHelmRelease(component, cobraCmd)
	if exist {
		// Delete
		err := utils.HelmDelete(component, cobraCmd)
		if err != nil {
			fmt.Println("Helm delete failed with Error: ", err)
		}
		messages <- "Deleted " + component
	} else {
		messages <- "Missing " + component
	}
}
+201 −232

File changed.

Preview size limit exceeded, changes collapsed.

+146 −98

File changed.

Preview size limit exceeded, changes collapsed.

Loading