Skip to content

Commit f59c3b2

Browse files
committed
Breaking config changes
1 parent b96a0a7 commit f59c3b2

22 files changed

Lines changed: 252 additions & 204 deletions

File tree

cmd/add.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ func (cmd *AddCmd) RunAddSync(cobraCmd *cobra.Command, args []string) {
312312
config := configutil.GetConfig()
313313

314314
if cmd.syncFlags.Selector == "" {
315-
cmd.syncFlags.Selector = "release=" + *config.DevSpace.Release.Name
315+
cmd.syncFlags.Selector = "release=" + *configutil.GetDefaultDevSpaceDefaultReleaseName(config)
316316
}
317317

318318
labelSelectorMap, err := parseSelectors(cmd.syncFlags.Selector)
@@ -365,25 +365,22 @@ func (cmd *AddCmd) RunAddPort(cobraCmd *cobra.Command, args []string) {
365365
config := configutil.GetConfig()
366366

367367
if cmd.portFlags.Selector == "" {
368-
cmd.portFlags.Selector = "release=" + *config.DevSpace.Release.Name
368+
cmd.portFlags.Selector = "release=" + *configutil.GetDefaultDevSpaceDefaultReleaseName(config)
369369
}
370370

371371
labelSelectorMap, err := parseSelectors(cmd.portFlags.Selector)
372-
373372
if err != nil {
374373
log.Fatalf("Error parsing selectors: %s", err.Error())
375374
}
376375

377376
portMappings, err := parsePortMappings(args[0])
378-
379377
if err != nil {
380378
log.Fatalf("Error parsing port mappings: %s", err.Error())
381379
}
382380

383381
cmd.insertOrReplacePortMapping(labelSelectorMap, portMappings)
384382

385383
err = configutil.SaveConfig()
386-
387384
if err != nil {
388385
log.Fatalf("Couldn't save config file: %s", err.Error())
389386
}

cmd/down.go

Lines changed: 61 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package cmd
33
import (
44
"github.com/covexo/devspace/pkg/devspace/config/configutil"
55
helmClient "github.com/covexo/devspace/pkg/devspace/deploy/helm"
6+
deployKubectl "github.com/covexo/devspace/pkg/devspace/deploy/kubectl"
67
"github.com/covexo/devspace/pkg/devspace/kubectl"
78
"github.com/covexo/devspace/pkg/util/log"
9+
"k8s.io/client-go/kubernetes"
810

911
"github.com/spf13/cobra"
1012
)
@@ -43,30 +45,72 @@ your project, use: devspace reset
4345
// Run executes the down command logic
4446
func (cmd *DownCmd) Run(cobraCmd *cobra.Command, args []string) {
4547
log.StartFileLogging()
46-
config := configutil.GetConfig()
47-
48-
releaseName := *config.DevSpace.Release.Name
4948
kubectl, err := kubectl.NewClient()
50-
5149
if err != nil {
5250
log.Fatalf("Unable to create new kubectl client: %s", err.Error())
5351
}
5452

55-
client, err := helmClient.NewClient(kubectl, false)
53+
deleteDevSpace(kubectl)
54+
}
5655

57-
if err != nil {
58-
log.Fatalf("Unable to initialize helm client: %s", err.Error())
59-
}
56+
func deleteDevSpace(kubectl *kubernetes.Clientset) {
57+
var err error
58+
var client *helmClient.ClientWrapper
59+
60+
config := configutil.GetConfig()
61+
62+
if config.DevSpace.Deploy != nil {
63+
for _, deployConfig := range *config.DevSpace.Deploy {
64+
// Delete kubectl engine
65+
if deployConfig.Engine != nil && deployConfig.Engine.Kubectl != nil {
66+
kubectlDeployConfig, err := deployKubectl.New(config, deployConfig)
67+
if err != nil {
68+
log.Warnf("Unable to create kubectl deploy config: %v", err)
69+
continue
70+
}
71+
72+
log.StartWait("Deleting kubectl deployment")
73+
err = kubectlDeployConfig.Delete()
74+
log.StopWait()
75+
if err != nil {
76+
log.Warnf("Error deleting kubectl manifests: %v", err)
77+
}
78+
79+
log.Donef("Successfully deleted kubectl deployment")
80+
} else {
81+
// Delete with helm engine
82+
defaultReleaseName := configutil.GetDefaultDevSpaceDefaultReleaseName(config)
83+
84+
releaseName := defaultReleaseName
85+
if deployConfig.Engine != nil && deployConfig.Engine.Helm != nil && deployConfig.Engine.Helm.Release != nil {
86+
releaseName = deployConfig.Engine.Helm.Release
87+
}
88+
89+
if client == nil {
90+
isDeployed := helmClient.IsTillerDeployed(kubectl)
91+
if isDeployed == false {
92+
continue
93+
}
94+
95+
client, err = helmClient.NewClient(kubectl, false)
96+
if err != nil {
97+
log.Warnf("Unable to initialize helm client: %s", err.Error())
98+
continue
99+
}
100+
}
60101

61-
log.StartWait("Deleting release " + releaseName)
62-
res, err := client.DeleteRelease(releaseName, true)
63-
log.StopWait()
102+
log.StartWait("Deleting release " + *releaseName)
103+
res, err := client.DeleteRelease(*releaseName, true)
104+
log.StopWait()
64105

65-
if res != nil && res.Info != "" {
66-
log.Donef("Successfully deleted release %s: %s", releaseName, res.Info)
67-
} else if err != nil {
68-
log.Donef("Error deleting release %s: %s", releaseName, err.Error())
69-
} else {
70-
log.Donef("Successfully deleted release %s", releaseName)
106+
if res != nil && res.Info != "" {
107+
log.Donef("Successfully deleted release %s: %s", releaseName, res.Info)
108+
} else if err != nil {
109+
log.Warnf("Error deleting release %s: %s", releaseName, err.Error())
110+
} else {
111+
log.Donef("Successfully deleted release %s", releaseName)
112+
}
113+
}
114+
}
71115
}
72116
}

cmd/init.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,7 @@ func (cmd *InitCmd) Run(cobraCmd *cobra.Command, args []string) {
122122
configutil.Merge(config, &v1.Config{
123123
Version: configutil.String("v1"),
124124
DevSpace: &v1.DevSpaceConfig{
125-
Release: &v1.Release{
126-
Name: configutil.String("devspace"),
127-
Namespace: configutil.String("default"),
128-
},
125+
Deploy: &[]*v1.DeployConfig{},
129126
},
130127
Images: &map[string]*v1.ImageConfig{
131128
"default": &v1.ImageConfig{
@@ -200,12 +197,15 @@ func (cmd *InitCmd) initChartGenerator() {
200197

201198
func (cmd *InitCmd) configureDevSpace() {
202199
config := configutil.GetConfig()
203-
204-
config.DevSpace.Release.Namespace = stdinutil.GetFromStdin(&stdinutil.GetFromStdinParams{
200+
namespace := stdinutil.GetFromStdin(&stdinutil.GetFromStdinParams{
205201
Question: "Which Kubernetes namespace should your application run in?",
206-
DefaultValue: *config.DevSpace.Release.Namespace,
202+
DefaultValue: "default",
207203
ValidationRegexPattern: v1.Kubernetes.RegexPatterns.Name,
208204
})
205+
206+
*config.DevSpace.Deploy = append(*config.DevSpace.Deploy, &v1.DeployConfig{
207+
Namespace: namespace,
208+
})
209209
}
210210

211211
func (cmd *InitCmd) addDefaultSyncConfig() {
@@ -235,7 +235,7 @@ func (cmd *InitCmd) addDefaultSyncConfig() {
235235
LocalSubPath: configutil.String("./"),
236236
ResourceType: nil,
237237
LabelSelector: &map[string]*string{
238-
"release": config.DevSpace.Release.Name,
238+
"release": configutil.GetDefaultDevSpaceDefaultReleaseName(config),
239239
},
240240
UploadExcludePaths: &uploadExcludePaths,
241241
})

cmd/reset.go

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,11 @@ func (cmd *ResetCmd) Run(cobraCmd *cobra.Command, args []string) {
7777
log.Failf("Failed to initialize kubectl client: %v", err)
7878
}
7979
}
80+
8081
cmd.determineResetExtent()
8182

8283
if cmd.flags.deleteRelease {
83-
log.StartWait("Deleting devspace release")
8484
err = cmd.deleteRelease()
85-
log.StopWait()
86-
87-
if err != nil {
88-
log.Failf("Error deleting release: %s", err.Error())
89-
} else {
90-
log.Done("Successfully deleted release")
91-
}
9285
}
9386

9487
if cmd.flags.deleteRegistry {
@@ -255,28 +248,8 @@ func (cmd *ResetCmd) shouldContinue() bool {
255248
}
256249

257250
func (cmd *ResetCmd) deleteRelease() error {
258-
var err error
259-
config := configutil.GetConfig()
260-
261-
releaseName := *config.DevSpace.Release.Name
262-
263-
if cmd.kubectl == nil || cmd.helm == nil {
264-
isDeployed := helmClient.IsTillerDeployed(cmd.kubectl)
265-
266-
if isDeployed == false {
267-
return nil
268-
}
269-
270-
cmd.helm, err = helmClient.NewClient(cmd.kubectl, false)
271-
272-
if err != nil {
273-
return err
274-
}
275-
}
276-
277-
_, err = cmd.helm.DeleteRelease(releaseName, true)
278-
279-
return err
251+
deleteDevSpace(cmd.kubectl)
252+
return nil
280253
}
281254

282255
func (cmd *ResetCmd) deleteRegistry() error {

pkg/devspace/cloud/config.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"os"
66
"path/filepath"
77

8+
"github.com/covexo/devspace/pkg/devspace/config/v1"
89
homedir "github.com/mitchellh/go-homedir"
910
yaml "gopkg.in/yaml.v2"
1011
)
@@ -104,3 +105,13 @@ func SaveCloudConfig(config ProviderConfig) error {
104105

105106
return ioutil.WriteFile(cfgPath, out, 0600)
106107
}
108+
109+
// UpdateDevSpaceConfig sets the devspace config to the correct namespaces
110+
func UpdateDevSpaceConfig(dsConfig *v1.Config, namespace string) error {
111+
// Exchange namespaces
112+
for _, deployConfig := range *dsConfig.DevSpace.Deployments {
113+
deployConfig.Namespace = &namespace
114+
}
115+
116+
return nil
117+
}

pkg/devspace/cloud/login.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,10 @@ func Update(providerConfig ProviderConfig, dsConfig *v1.Config, useKubeContext,
130130
return err
131131
}
132132

133-
dsConfig.DevSpace.Release.Namespace = &namespace
133+
err = UpdateDevSpaceConfig(dsConfig, namespace)
134+
if err != nil {
135+
return err
136+
}
134137

135138
if useKubeContext {
136139
kubeContext := DevSpaceKubeContextName + "-" + namespace
@@ -170,15 +173,13 @@ func UpdateKubeConfig(contextName, namespace string, cluster *api.Cluster, authI
170173
config.Clusters[contextName] = cluster
171174
config.AuthInfos[contextName] = authInfo
172175

173-
// Check if we need to add the context
174-
if _, ok := config.Contexts[contextName]; !ok {
175-
context := api.NewContext()
176-
context.Cluster = contextName
177-
context.AuthInfo = contextName
178-
context.Namespace = namespace
176+
// Update kube context
177+
context := api.NewContext()
178+
context.Cluster = contextName
179+
context.AuthInfo = contextName
180+
context.Namespace = namespace
179181

180-
config.Contexts[contextName] = context
181-
}
182+
config.Contexts[contextName] = context
182183

183184
return kubeconfig.WriteKubeConfig(config, clientcmd.RecommendedHomeFile)
184185
}

pkg/devspace/config/configutil/get.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,6 @@ func GetConfig() *v1.Config {
7878
merge(config, configRaw, unsafe.Pointer(&config), unsafe.Pointer(configRaw))
7979
merge(overwriteConfig, overwriteConfigRaw, unsafe.Pointer(&overwriteConfig), unsafe.Pointer(overwriteConfigRaw))
8080
merge(config, overwriteConfig, unsafe.Pointer(&config), unsafe.Pointer(overwriteConfig))
81-
82-
if config.DevSpace.Release != nil && config.DevSpace.Release.Namespace == nil {
83-
config.DevSpace.Release.Namespace = String("default")
84-
}
8581
})
8682

8783
return config

pkg/devspace/config/configutil/make.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ func makeConfig() *v1.Config {
1212
DevSpace: &v1.DevSpaceConfig{
1313
Terminal: &v1.Terminal{},
1414
PortForwarding: &[]*v1.PortForwardingConfig{},
15-
Release: &v1.Release{},
15+
Deployments: &[]*v1.DeploymentConfig{},
1616
Sync: &[]*v1.SyncConfig{},
1717
},
1818
Images: &map[string]*v1.ImageConfig{},
1919
Registries: &map[string]*v1.RegistryConfig{},
20-
Services: &v1.ServiceConfig{},
2120
}
2221
}

pkg/devspace/config/generated/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010

1111
// Config specifies the runtime config struct
1212
type Config struct {
13-
HelmChartHash string `yaml:"chartHash"`
13+
ChartHashs map[string]string `yaml:"chartHashs"`
1414
DockerLatestTimestamps map[string]int64 `yaml:"dockerLatestTimestamps"`
1515
ImageTags map[string]string `yaml:"imageTags"`
1616
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package v1
2+
3+
// DeploymentConfig defines the configuration how the devspace should be deployed
4+
type DeploymentConfig struct {
5+
Name *string `yaml:"name"`
6+
Namespace *string `yaml:"namespace"`
7+
Helm *HelmConfig `yaml:"helm,omitempty"`
8+
Kubectl *KubectlConfig `yaml:"kubectl,omitempty"`
9+
}
10+
11+
// HelmConfig defines the specific helm options used during deployment
12+
type HelmConfig struct {
13+
ReleaseName *string `yaml:"releaseName,omitempty"`
14+
ChartPath *string `yaml:"chartPath,omitempty"`
15+
Values *map[interface{}]interface{} `yaml:"values,omitempty"`
16+
}
17+
18+
// KubectlConfig defines the specific kubectl options used during deployment
19+
type KubectlConfig struct {
20+
CmdPath *string `yaml:"cmdPath,omitempty"`
21+
Manifests *[]*string `yaml:"manifests,omitempty"`
22+
}

0 commit comments

Comments
 (0)