-
Notifications
You must be signed in to change notification settings - Fork 371
/
Copy pathdown.go
139 lines (116 loc) · 4.06 KB
/
down.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package cmd
import (
"strings"
"github.com/covexo/devspace/pkg/devspace/config/configutil"
"github.com/covexo/devspace/pkg/devspace/deploy"
deployHelm "github.com/covexo/devspace/pkg/devspace/deploy/helm"
deployKubectl "github.com/covexo/devspace/pkg/devspace/deploy/kubectl"
"github.com/covexo/devspace/pkg/devspace/kubectl"
"github.com/covexo/devspace/pkg/util/log"
"k8s.io/client-go/kubernetes"
"github.com/spf13/cobra"
)
// DownCmd holds the required data for the down cmd
type DownCmd struct {
flags *DownCmdFlags
}
// DownCmdFlags holds the possible down cmd flags
type DownCmdFlags struct {
config string
configOverwrite string
deployment string
}
func init() {
cmd := &DownCmd{
flags: &DownCmdFlags{},
}
cobraCmd := &cobra.Command{
Use: "down",
Short: "Shutdown your DevSpace",
Long: `
#######################################################
################### devspace down #####################
#######################################################
Stops your DevSpace by removing the release via helm.
If you want to remove all DevSpace related data from
your project, use: devspace reset
#######################################################`,
Args: cobra.NoArgs,
Run: cmd.Run,
}
cobraCmd.Flags().StringVarP(&cmd.flags.deployment, "deployment", "d", "", "The deployment to delete (You can specify multiple deployments comma-separated, e.g. devspace-default,devspace-database etc.)")
cobraCmd.Flags().StringVar(&cmd.flags.config, "config", configutil.ConfigPath, "The devspace config file to load (default: '.devspace/config.yaml')")
cobraCmd.Flags().StringVar(&cmd.flags.configOverwrite, "config-overwrite", configutil.OverwriteConfigPath, "The devspace config overwrite file to load (default: '.devspace/overwrite.yaml')")
rootCmd.AddCommand(cobraCmd)
}
// Run executes the down command logic
func (cmd *DownCmd) Run(cobraCmd *cobra.Command, args []string) {
if configutil.ConfigPath != cmd.flags.config {
configutil.ConfigPath = cmd.flags.config
// Don't use overwrite config if we use a different config
configutil.OverwriteConfigPath = ""
}
if configutil.OverwriteConfigPath != cmd.flags.configOverwrite {
configutil.OverwriteConfigPath = cmd.flags.configOverwrite
}
log.StartFileLogging()
log.Infof("Loading config %s with overwrite config %s", configutil.ConfigPath, configutil.OverwriteConfigPath)
kubectl, err := kubectl.NewClient()
if err != nil {
log.Fatalf("Unable to create new kubectl client: %s", err.Error())
}
deployments := []string{}
if cmd.flags.deployment != "" {
deployments = strings.Split(cmd.flags.deployment, ",")
for index := range deployments {
deployments[index] = strings.TrimSpace(deployments[index])
}
}
deleteDevSpace(kubectl, deployments)
}
func deleteDevSpace(kubectl *kubernetes.Clientset, deployments []string) {
config := configutil.GetConfig()
if deployments != nil && len(deployments) == 0 {
deployments = nil
}
if config.DevSpace.Deployments != nil {
for _, deployConfig := range *config.DevSpace.Deployments {
// Check if we should skip deleting deployment
if deployments != nil {
found := false
for _, value := range deployments {
if value == *deployConfig.Name {
found = true
break
}
}
if found == false {
continue
}
}
var err error
var deployClient deploy.Interface
// Delete kubectl engine
if deployConfig.Kubectl != nil {
deployClient, err = deployKubectl.New(kubectl, deployConfig, log.GetInstance())
if err != nil {
log.Warnf("Unable to create kubectl deploy config: %v", err)
continue
}
} else {
deployClient, err = deployHelm.New(kubectl, deployConfig, false, log.GetInstance())
if err != nil {
log.Warnf("Unable to create helm deploy config: %v", err)
continue
}
}
log.StartWait("Deleting deployment %s" + *deployConfig.Name)
err = deployClient.Delete()
log.StopWait()
if err != nil {
log.Warnf("Error deleting deployment %s: %v", *deployConfig.Name, err)
}
log.Donef("Successfully deleted deployment %s", *deployConfig.Name)
}
}
}