Skip to content

Commit 60fa0d6

Browse files
author
Lukas Gentele
authored
Merge pull request #163 from covexo/issue-101
Issue 101
2 parents 8e2090a + 3b261bb commit 60fa0d6

12 files changed

Lines changed: 368 additions & 178 deletions

File tree

cmd/add.go

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cmd
22

33
import (
44
"fmt"
5+
"os"
56
"strconv"
67
"strings"
78

@@ -17,7 +18,6 @@ type AddCmd struct {
1718
syncFlags *addSyncCmdFlags
1819
portFlags *addPortCmdFlags
1920
dsConfig *v1.DevSpaceConfig
20-
workdir string
2121
}
2222

2323
// AddCmdFlags holds the possible flags for the add command
@@ -138,14 +138,28 @@ func (cmd *AddCmd) RunAddSync(cobraCmd *cobra.Command, args []string) {
138138
}
139139
}
140140

141-
config.DevSpace.Sync = append(config.DevSpace.Sync, &v1.SyncConfig{
141+
workdir, err := os.Getwd()
142+
143+
if err != nil {
144+
log.Fatalf("Unable to determine current workdir: %s", err.Error())
145+
}
146+
cmd.syncFlags.LocalPath = strings.TrimPrefix(cmd.syncFlags.LocalPath, workdir)
147+
cmd.syncFlags.LocalPath = "./" + strings.TrimPrefix(cmd.syncFlags.LocalPath, "./")
148+
149+
if cmd.syncFlags.ContainerPath[0] != '/' {
150+
log.Fatal("ContainerPath (--container) must start with '/'. Info: There is an issue with MINGW based terminals like git bash.")
151+
}
152+
153+
syncConfig := append(*config.DevSpace.Sync, &v1.SyncConfig{
142154
ResourceType: configutil.String(cmd.syncFlags.ResourceType),
143-
LabelSelector: labelSelectorMap,
155+
LabelSelector: &labelSelectorMap,
144156
ContainerPath: configutil.String(cmd.syncFlags.ContainerPath),
145157
LocalSubPath: configutil.String(cmd.syncFlags.LocalPath),
146-
ExcludePaths: excludedPaths,
158+
ExcludePaths: &excludedPaths,
147159
})
148160

161+
config.DevSpace.Sync = &syncConfig
162+
149163
err = configutil.SaveConfig()
150164

151165
if err != nil {
@@ -186,19 +200,30 @@ func (cmd *AddCmd) insertOrReplacePortMapping(labelSelectorMap map[string]*strin
186200
config := configutil.GetConfig(false)
187201

188202
// Check if we should add to existing port mapping
189-
for _, v := range config.DevSpace.PortForwarding {
190-
if *v.ResourceType == cmd.portFlags.ResourceType && isMapEqual(v.LabelSelector, labelSelectorMap) {
191-
v.PortMappings = append(v.PortMappings, portMappings...)
203+
for _, v := range *config.DevSpace.PortForwarding {
204+
var selectors map[string]*string
205+
206+
if v.LabelSelector != nil {
207+
selectors = *v.LabelSelector
208+
} else {
209+
selectors = map[string]*string{}
210+
}
211+
212+
if *v.ResourceType == cmd.portFlags.ResourceType && isMapEqual(selectors, labelSelectorMap) {
213+
portMap := append(*v.PortMappings, portMappings...)
214+
215+
v.PortMappings = &portMap
192216

193217
return
194218
}
195219
}
196-
197-
config.DevSpace.PortForwarding = append(config.DevSpace.PortForwarding, &v1.PortForwardingConfig{
220+
portMap := append(*config.DevSpace.PortForwarding, &v1.PortForwardingConfig{
198221
ResourceType: configutil.String(cmd.portFlags.ResourceType),
199-
LabelSelector: labelSelectorMap,
200-
PortMappings: portMappings,
222+
LabelSelector: &labelSelectorMap,
223+
PortMappings: &portMappings,
201224
})
225+
226+
config.DevSpace.PortForwarding = &portMap
202227
}
203228

204229
func isMapEqual(map1 map[string]*string, map2 map[string]*string) bool {

cmd/init.go

Lines changed: 67 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ func (cmd *InitCmd) determineAppConfig() {
226226
cmd.addPortForwarding(portInt)
227227
}
228228
}
229-
cmd.addSyncPath()
229+
cmd.addDefaultSyncConfig()
230230

231231
/* TODO
232232
cmd.appConfig.External.Domain = stdinutil.GetFromStdin(&stdinutil.GetFromStdinParams{
@@ -237,42 +237,45 @@ func (cmd *InitCmd) determineAppConfig() {
237237
}
238238

239239
func (cmd *InitCmd) addPortForwarding(port int) {
240-
OUTER:
241-
for _, portForwarding := range cmd.config.DevSpace.PortForwarding {
242-
for _, portMapping := range portForwarding.PortMappings {
240+
for _, portForwarding := range *cmd.config.DevSpace.PortForwarding {
241+
for _, portMapping := range *portForwarding.PortMappings {
243242
if *portMapping.RemotePort == port {
244-
cmd.config.DevSpace.PortForwarding = append(cmd.config.DevSpace.PortForwarding, &v1.PortForwardingConfig{
245-
PortMappings: []*v1.PortMapping{
246-
{
247-
LocalPort: &port,
248-
RemotePort: &port,
249-
},
250-
},
251-
ResourceType: configutil.String("pod"),
252-
LabelSelector: map[string]*string{
253-
"release": cmd.config.DevSpace.Release.Name,
254-
},
255-
})
256-
break OUTER
243+
return
257244
}
258245
}
259246
}
247+
248+
portForwarding := append(*cmd.config.DevSpace.PortForwarding, &v1.PortForwardingConfig{
249+
PortMappings: &[]*v1.PortMapping{
250+
{
251+
LocalPort: &port,
252+
RemotePort: &port,
253+
},
254+
},
255+
ResourceType: configutil.String("pod"),
256+
LabelSelector: &map[string]*string{
257+
"release": cmd.config.DevSpace.Release.Name,
258+
},
259+
})
260+
cmd.config.DevSpace.PortForwarding = &portForwarding
260261
}
261262

262-
func (cmd *InitCmd) addSyncPath() {
263-
for _, syncPath := range cmd.config.DevSpace.Sync {
263+
func (cmd *InitCmd) addDefaultSyncConfig() {
264+
for _, syncPath := range *cmd.config.DevSpace.Sync {
264265
if *syncPath.LocalSubPath == "./" || *syncPath.ContainerPath == "/app" {
265-
cmd.config.DevSpace.Sync = append(cmd.config.DevSpace.Sync, &v1.SyncConfig{
266-
ContainerPath: configutil.String("/app"),
267-
LocalSubPath: configutil.String("./"),
268-
ResourceType: configutil.String("pod"),
269-
LabelSelector: map[string]*string{
270-
"release": cmd.config.DevSpace.Release.Name,
271-
},
272-
})
273-
break
266+
return
274267
}
275268
}
269+
270+
syncConfig := append(*cmd.config.DevSpace.Sync, &v1.SyncConfig{
271+
ContainerPath: configutil.String("/app"),
272+
LocalSubPath: configutil.String("./"),
273+
ResourceType: configutil.String("pod"),
274+
LabelSelector: &map[string]*string{
275+
"release": cmd.config.DevSpace.Release.Name,
276+
},
277+
})
278+
cmd.config.DevSpace.Sync = &syncConfig
276279
}
277280

278281
func (cmd *InitCmd) reconfigure() {
@@ -352,7 +355,7 @@ func (cmd *InitCmd) reconfigure() {
352355

353356
func (cmd *InitCmd) reconfigureRegistry() {
354357
overwriteConfig := configutil.GetOverwriteConfig()
355-
registryConfig := overwriteConfig.Services.Registry
358+
registryConfig := cmd.config.Services.Registry
356359

357360
enableAutomaticBuilds := stdinutil.GetFromStdin(&stdinutil.GetFromStdinParams{
358361
Question: "Do you want to enable automatic Docker image building?",
@@ -405,10 +408,39 @@ func (cmd *InitCmd) reconfigureRegistry() {
405408
}
406409
registryUser.Password = &randomPassword
407410
}
408-
registryReleaseValues := registryConfig.Internal.Release.Values
411+
var registryReleaseValues map[interface{}]interface{}
409412

410-
if registryReleaseValues == nil {
413+
if registryConfig.Internal.Release.Values != nil {
414+
registryReleaseValues = *registryConfig.Internal.Release.Values
415+
} else {
411416
registryReleaseValues = map[interface{}]interface{}{}
417+
418+
registryDomain := stdinutil.GetFromStdin(&stdinutil.GetFromStdinParams{
419+
Question: "Which domain should your container registry be using? (optional, requires an ingress controller)",
420+
ValidationRegexPattern: "^(([a-z0-9]([a-z0-9-]{0,120}[a-z0-9])?\\.)+[a-z0-9]{2,})?$",
421+
})
422+
423+
if *registryDomain != "" {
424+
registryReleaseValues = map[interface{}]interface{}{
425+
"Ingress": map[string]interface{}{
426+
"Enabled": true,
427+
"Hosts": []string{
428+
*registryDomain,
429+
},
430+
"Annotations": map[string]string{
431+
"Kubernetes.io/tls-acme": "true",
432+
},
433+
"Tls": []map[string]interface{}{
434+
map[string]interface{}{
435+
"SecretName": "tls-devspace-registry",
436+
"Hosts": []string{
437+
*registryDomain,
438+
},
439+
},
440+
},
441+
},
442+
}
443+
}
412444
}
413445
secrets, registryHasSecrets := registryReleaseValues["secrets"]
414446

@@ -425,6 +457,7 @@ func (cmd *InitCmd) reconfigureRegistry() {
425457
secretMap["htpasswd"] = ""
426458
}
427459
}
460+
registryConfig.Internal.Release.Values = &registryReleaseValues
428461
}
429462
}
430463
}
@@ -439,12 +472,15 @@ func (cmd *InitCmd) determineLanguage() {
439472
}
440473

441474
if len(cmd.chartGenerator.Language) == 0 {
475+
log.StartWait("Detecting programming language")
476+
442477
cmd.chartGenerator.Language, _ = cmd.chartGenerator.GetLanguage()
443478
supportedLanguages, err := cmd.chartGenerator.GetSupportedLanguages()
444479

445480
if cmd.chartGenerator.Language == "" {
446481
cmd.chartGenerator.Language = "none"
447482
}
483+
log.StopWait()
448484

449485
if err != nil {
450486
log.Fatalf("Unable to get supported languages: %s", err.Error())

cmd/list.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func init() {
7878
func (cmd *ListCmd) RunListSync(cobraCmd *cobra.Command, args []string) {
7979
config := configutil.GetConfig(false)
8080

81-
if len(config.DevSpace.Sync) == 0 {
81+
if len(*config.DevSpace.Sync) == 0 {
8282
log.Write("No sync paths are configured. Run `devspace add sync` to add new sync path\n")
8383
return
8484
}
@@ -91,13 +91,13 @@ func (cmd *ListCmd) RunListSync(cobraCmd *cobra.Command, args []string) {
9191
"Excluded Paths",
9292
}
9393

94-
syncPaths := make([][]string, 0, len(config.DevSpace.Sync))
94+
syncPaths := make([][]string, 0, len(*config.DevSpace.Sync))
9595

9696
// Transform values into string arrays
97-
for _, value := range config.DevSpace.Sync {
97+
for _, value := range *config.DevSpace.Sync {
9898
selector := ""
9999

100-
for k, v := range value.LabelSelector {
100+
for k, v := range *value.LabelSelector {
101101
if len(selector) > 0 {
102102
selector += ", "
103103
}
@@ -107,7 +107,7 @@ func (cmd *ListCmd) RunListSync(cobraCmd *cobra.Command, args []string) {
107107

108108
excludedPaths := ""
109109

110-
for _, v := range value.ExcludePaths {
110+
for _, v := range *value.ExcludePaths {
111111
if len(excludedPaths) > 0 {
112112
excludedPaths += ", "
113113
}
@@ -131,7 +131,7 @@ func (cmd *ListCmd) RunListSync(cobraCmd *cobra.Command, args []string) {
131131
func (cmd *ListCmd) RunListPort(cobraCmd *cobra.Command, args []string) {
132132
config := configutil.GetConfig(false)
133133

134-
if len(config.DevSpace.PortForwarding) == 0 {
134+
if len(*config.DevSpace.PortForwarding) == 0 {
135135
log.Write("No ports are forwarded. Run `devspace add port` to add a port that should be forwarded\n")
136136
return
137137
}
@@ -142,13 +142,13 @@ func (cmd *ListCmd) RunListPort(cobraCmd *cobra.Command, args []string) {
142142
"Ports (Local:Remote)",
143143
}
144144

145-
portForwards := make([][]string, 0, len(config.DevSpace.PortForwarding))
145+
portForwards := make([][]string, 0, len(*config.DevSpace.PortForwarding))
146146

147147
// Transform values into string arrays
148-
for _, value := range config.DevSpace.PortForwarding {
148+
for _, value := range *config.DevSpace.PortForwarding {
149149
selector := ""
150150

151-
for k, v := range value.LabelSelector {
151+
for k, v := range *value.LabelSelector {
152152
if len(selector) > 0 {
153153
selector += ", "
154154
}
@@ -158,7 +158,7 @@ func (cmd *ListCmd) RunListPort(cobraCmd *cobra.Command, args []string) {
158158

159159
portMappings := ""
160160

161-
for _, v := range value.PortMappings {
161+
for _, v := range *value.PortMappings {
162162
if len(portMappings) > 0 {
163163
portMappings += ", "
164164
}

cmd/remove.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,20 +120,20 @@ func (cmd *RemoveCmd) RunRemoveSync(cobraCmd *cobra.Command, args []string) {
120120
return
121121
}
122122

123-
newSyncPaths := make([]*v1.SyncConfig, 0, len(config.DevSpace.Sync)-1)
123+
newSyncPaths := make([]*v1.SyncConfig, 0, len(*config.DevSpace.Sync)-1)
124124

125-
for _, v := range config.DevSpace.Sync {
125+
for _, v := range *config.DevSpace.Sync {
126126
if cmd.syncFlags.RemoveAll ||
127127
cmd.syncFlags.LocalPath == *v.LocalSubPath ||
128128
cmd.syncFlags.ContainerPath == *v.ContainerPath ||
129-
isMapEqual(labelSelectorMap, v.LabelSelector) {
129+
isMapEqual(labelSelectorMap, *v.LabelSelector) {
130130
continue
131131
}
132132

133133
newSyncPaths = append(newSyncPaths, v)
134134
}
135135

136-
config.DevSpace.Sync = newSyncPaths
136+
config.DevSpace.Sync = &newSyncPaths
137137

138138
err = configutil.SaveConfig()
139139

@@ -166,16 +166,16 @@ func (cmd *RemoveCmd) RunRemovePort(cobraCmd *cobra.Command, args []string) {
166166
}
167167

168168
ports := strings.Split(argPorts, ",")
169-
newPortForwards := make([]*v1.PortForwardingConfig, 0, len(config.DevSpace.PortForwarding)-1)
169+
newPortForwards := make([]*v1.PortForwardingConfig, 0, len(*config.DevSpace.PortForwarding)-1)
170170

171171
OUTER:
172-
for _, v := range config.DevSpace.PortForwarding {
172+
for _, v := range *config.DevSpace.PortForwarding {
173173
if cmd.portFlags.RemoveAll ||
174-
isMapEqual(labelSelectorMap, v.LabelSelector) {
174+
isMapEqual(labelSelectorMap, *v.LabelSelector) {
175175
continue
176176
}
177177

178-
for _, pm := range v.PortMappings {
178+
for _, pm := range *v.PortMappings {
179179
if containsPort(strconv.Itoa(*pm.LocalPort), ports) || containsPort(strconv.Itoa(*pm.RemotePort), ports) {
180180
continue OUTER
181181
}
@@ -184,7 +184,7 @@ OUTER:
184184
newPortForwards = append(newPortForwards, v)
185185
}
186186

187-
config.DevSpace.PortForwarding = newPortForwards
187+
config.DevSpace.PortForwarding = &newPortForwards
188188

189189
err = configutil.SaveConfig()
190190

0 commit comments

Comments
 (0)