Skip to content

Commit 7d3b745

Browse files
authored
Merge pull request #2035 from FabianKramm/master
refactor: fix init problem & move validation
2 parents b08646b + ebaa015 commit 7d3b745

20 files changed

Lines changed: 250 additions & 192 deletions

File tree

cmd/init.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,6 @@ const devspaceFolderGitignore = "\n\n# Ignore DevSpace cache and log folder\n.de
4949

5050
const (
5151
// Dockerfile not found options
52-
UseExistingDockerfileOption = "Use the Dockerfile in ./Dockerfile"
53-
CreateDockerfileOption = "Create a Dockerfile for this project"
54-
EnterDockerfileOption = "Enter path to a different Dockerfile"
5552
DeployOptionHelm = "helm"
5653
DeployOptionKubectl = "kubectl"
5754
DeployOptionKustomize = "kustomize"
@@ -162,9 +159,8 @@ func (cmd *InitCmd) Run(f factory.Factory) error {
162159
} else {
163160
err = cmd.initDevspace(f, configLoader)
164161
}
165-
166162
if err != nil {
167-
panic(err)
163+
return err
168164
}
169165

170166
cmd.log.WriteString(logrus.InfoLevel, "\n")
@@ -437,7 +433,7 @@ func (cmd *InitCmd) initDevspace(f factory.Factory, configLoader loader.ConfigLo
437433

438434
config.Commands["migrate-db"] = &latest.CommandConfig{
439435
Command: `echo 'This is a cross-platform, shared command that can be used to codify any kind of dev task.'
440-
echo 'Anyone using this project can invoke it via "devspace run migrate-db"'`,
436+
echo 'Anyone using this project can invoke it via "devspace run migrate-db"'`,
441437
}
442438
}
443439

@@ -456,8 +452,7 @@ start_dev ` + imageName + ` # 3. Start dev mode "` + imageNa
456452
config.Pipelines["deploy"] = &latest.Pipeline{
457453
Run: `run_dependency_pipelines --all # 1. Deploy any projects this project needs (see "dependencies")
458454
build_images --all -t $(git describe --always) # 2. Build, tag (git commit hash) and push all images (see "images")
459-
create_deployments --all \ # 3. Deploy Helm charts and manifests specfied as "deployments"
460-
--set updateImageTags=true # + make sure to update all image tags to the one from step 2`,
455+
create_deployments --all # 3. Deploy Helm charts and manifests specfied as "deployments"`,
461456
}
462457

463458
// Save config
@@ -739,7 +734,8 @@ func (cmd *InitCmd) render(f factory.Factory, config *latest.Config) (string, er
739734
}
740735
err = renderCmd.RunDefault(f)
741736
if err != nil {
742-
return "", err
737+
f.GetLog().Debugf("error rendering chart: %v", err)
738+
return "", nil
743739
}
744740

745741
return writer.String(), nil

cmd/print.go

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"github.com/loft-sh/devspace/pkg/devspace/config"
7+
"github.com/loft-sh/devspace/pkg/devspace/config/versions/latest"
78
devspacecontext "github.com/loft-sh/devspace/pkg/devspace/context"
89
"github.com/loft-sh/devspace/pkg/devspace/dependency"
910
"github.com/loft-sh/devspace/pkg/devspace/dependency/types"
@@ -27,8 +28,9 @@ import (
2728
type PrintCmd struct {
2829
*flags.GlobalFlags
2930

30-
Out io.Writer
31-
SkipInfo bool
31+
Out io.Writer
32+
StripNames bool
33+
SkipInfo bool
3234

3335
Dependency string
3436
}
@@ -37,6 +39,7 @@ type PrintCmd struct {
3739
func NewPrintCmd(f factory.Factory, globalFlags *flags.GlobalFlags) *cobra.Command {
3840
cmd := &PrintCmd{
3941
GlobalFlags: globalFlags,
42+
StripNames: true,
4043
Out: os.Stdout,
4144
}
4245

@@ -117,7 +120,7 @@ func (cmd *PrintCmd) Run(f factory.Factory) error {
117120
ctx = ctx.AsDependency(dep)
118121
}
119122

120-
bsConfig, err := yaml.Marshal(ctx.Config().Config())
123+
bsConfig, err := marshalConfig(ctx.Config().Config(), cmd.StripNames)
121124
if err != nil {
122125
return err
123126
}
@@ -141,6 +144,41 @@ func (cmd *PrintCmd) Run(f factory.Factory) error {
141144
return nil
142145
}
143146

147+
func marshalConfig(config *latest.Config, stripNames bool) ([]byte, error) {
148+
// remove the auto generated names
149+
if stripNames {
150+
for k := range config.Images {
151+
config.Images[k].Name = ""
152+
}
153+
for k := range config.Deployments {
154+
config.Deployments[k].Name = ""
155+
}
156+
for k := range config.Dependencies {
157+
config.Dependencies[k].Name = ""
158+
}
159+
for k := range config.Pipelines {
160+
config.Pipelines[k].Name = ""
161+
}
162+
for k := range config.Dev {
163+
config.Dev[k].Name = ""
164+
for c := range config.Dev[k].Containers {
165+
config.Dev[k].Containers[c].Container = ""
166+
}
167+
}
168+
for k := range config.Vars {
169+
config.Vars[k].Name = ""
170+
}
171+
for k := range config.PullSecrets {
172+
config.PullSecrets[k].Name = ""
173+
}
174+
for k := range config.Commands {
175+
config.Commands[k].Name = ""
176+
}
177+
}
178+
179+
return yaml.Marshal(config)
180+
}
181+
144182
func printExtraInfo(config config.Config, dependencies []types.Dependency, log logger.Logger) error {
145183
log.WriteString(logrus.InfoLevel, "\n-------------------\n\nVars:\n")
146184

cmd/run_pipeline.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ type RunPipelineCmd struct {
6464
// used for testing to allow interruption
6565
Ctx context.Context
6666
RenderWriter io.Writer
67-
log log.Logger
67+
Log log.Logger
6868
}
6969

7070
func (cmd *RunPipelineCmd) AddPipelineFlags(f factory.Factory, command *cobra.Command, pipeline *latest.Pipeline) {
@@ -227,16 +227,16 @@ func (cmd *RunPipelineCmd) Run(cobraCmd *cobra.Command, args []string, f factory
227227
cmd.Pipeline = args[0]
228228
}
229229

230-
if cmd.log == nil {
231-
cmd.log = f.GetLog()
230+
if cmd.Log == nil {
231+
cmd.Log = f.GetLog()
232232
}
233233
if cmd.Silent {
234-
cmd.log.SetLevel(logrus.FatalLevel)
234+
cmd.Log.SetLevel(logrus.FatalLevel)
235235
}
236236

237237
// Print upgrade message if new version available
238238
if !cmd.Render {
239-
upgrade.PrintUpgradeMessage(cmd.log)
239+
upgrade.PrintUpgradeMessage(cmd.Log)
240240
} else if cmd.RenderWriter == nil {
241241
cmd.RenderWriter = os.Stdout
242242
}
@@ -256,7 +256,7 @@ func (cmd *RunPipelineCmd) Run(cobraCmd *cobra.Command, args []string, f factory
256256
cmd.Ctx = values.WithFlags(cmd.Ctx, cobraCmd.Flags())
257257
}
258258
options := cmd.BuildOptions(cmd.ToConfigOptions())
259-
ctx, err := initialize(cmd.Ctx, f, false, options, cmd.log)
259+
ctx, err := initialize(cmd.Ctx, f, false, options, cmd.Log)
260260
if err != nil {
261261
return err
262262
}

cmd/sync.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
runtimevar "github.com/loft-sh/devspace/pkg/devspace/config/loader/variable/runtime"
77
"github.com/loft-sh/devspace/pkg/devspace/config/localcache"
8+
"github.com/loft-sh/devspace/pkg/devspace/config/versions"
89
devspacecontext "github.com/loft-sh/devspace/pkg/devspace/context"
910
"github.com/loft-sh/devspace/pkg/devspace/kubectl"
1011
"github.com/loft-sh/devspace/pkg/devspace/services/sync"
@@ -335,7 +336,7 @@ func (cmd *SyncCmd) applyFlagsToSyncConfig(syncConfig *latest.SyncConfig, option
335336
}
336337

337338
if cmd.InitialSync != "" {
338-
if !loader.ValidInitialSyncStrategy(latest.InitialSyncStrategy(cmd.InitialSync)) {
339+
if !versions.ValidInitialSyncStrategy(latest.InitialSyncStrategy(cmd.InitialSync)) {
339340
return options, errors.Errorf("--initial-sync is not valid '%s'", cmd.InitialSync)
340341
}
341342

e2e/tests/init/init.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package init
33
import (
44
"bytes"
55
"fmt"
6+
"github.com/loft-sh/devspace/pkg/util/log"
7+
"github.com/sirupsen/logrus"
68
"os"
79
"path/filepath"
810
"strings"
@@ -125,19 +127,15 @@ var _ = DevSpaceDescribe("init", func() {
125127
framework.ExpectNoError(err)
126128
defer framework.ExpectDeleteNamespace(kubeClient, ns)
127129

128-
done := make(chan error)
129-
go func() {
130-
devCmd := &cmd.RunPipelineCmd{
131-
GlobalFlags: &flags.GlobalFlags{
132-
NoWarn: true,
133-
Namespace: ns,
134-
},
135-
Pipeline: "dev",
136-
}
137-
done <- devCmd.RunDefault(f)
138-
}()
139-
140-
err = <-done
130+
devCmd := &cmd.RunPipelineCmd{
131+
GlobalFlags: &flags.GlobalFlags{
132+
NoWarn: true,
133+
Namespace: ns,
134+
},
135+
Pipeline: "dev",
136+
Log: log.GetInstance().WithLevel(logrus.DebugLevel),
137+
}
138+
err = devCmd.RunDefault(f)
141139
framework.ExpectNoError(err)
142140
})
143141

pkg/devspace/config/loader/imports.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,6 @@ func ResolveImports(ctx context.Context, resolver variable.Resolver, basePath st
5555
return nil, err
5656
}
5757

58-
err = Validate(imports)
59-
if err != nil {
60-
return nil, err
61-
}
62-
6358
mergedMap := map[string]interface{}{}
6459
err = util.Convert(rawData, mergedMap)
6560
if err != nil {

pkg/devspace/config/loader/loader.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -364,12 +364,6 @@ func reloadVariables(resolver variable.Resolver, rawConfig map[string]interface{
364364
return err
365365
}
366366

367-
// validate variables
368-
err = validateVars(loadedVars)
369-
if err != nil {
370-
return err
371-
}
372-
373367
// update the used vars in the resolver
374368
resolver.UpdateVars(loadedVars)
375369
return nil

pkg/devspace/config/loader/parser.go

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/loft-sh/devspace/pkg/devspace/config/versions/latest"
99
"github.com/loft-sh/devspace/pkg/util/log"
1010
"github.com/loft-sh/devspace/pkg/util/yamlutil"
11-
"github.com/pkg/errors"
1211
"gopkg.in/yaml.v3"
1312
)
1413

@@ -114,26 +113,23 @@ func fillVariablesAndParse(ctx context.Context, resolver variable.Resolver, prep
114113
return nil, nil, err
115114
}
116115

117-
latestConfig, err := Convert(preparedConfigInterface.(map[string]interface{}), log)
116+
latestConfig, err := versions.Parse(preparedConfigInterface.(map[string]interface{}), log)
118117
if err != nil {
119118
return nil, nil, err
120119
}
121120

122121
return latestConfig, preparedConfigInterface.(map[string]interface{}), nil
123122
}
124123

125-
func Convert(preparedConfig map[string]interface{}, log log.Logger) (*latest.Config, error) {
126-
// Now convert the whole config to latest
127-
latestConfig, err := versions.Parse(preparedConfig, log)
128-
if err != nil {
129-
return nil, errors.Wrap(err, "convert config")
130-
}
131-
132-
// now we validate the config
133-
err = Validate(latestConfig)
134-
if err != nil {
135-
return nil, err
124+
func EachDevContainer(devPod *latest.DevPod, each func(devContainer *latest.DevContainer) bool) {
125+
if len(devPod.Containers) > 0 {
126+
for _, devContainer := range devPod.Containers {
127+
cont := each(devContainer)
128+
if !cont {
129+
break
130+
}
131+
}
132+
} else {
133+
_ = each(&devPod.DevContainer)
136134
}
137-
138-
return latestConfig, nil
139135
}

pkg/devspace/config/loader/variable/legacy/replace.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package legacy
22

33
import (
44
"fmt"
5+
"github.com/loft-sh/devspace/pkg/util/dockerfile"
56
"regexp"
67
"strings"
78

@@ -98,7 +99,7 @@ func resolveImage(value string, config config2.Config, dependencies []types.Depe
9899
}
99100

100101
// strip docker image name
101-
image, originalTag, err := imageselector.GetStrippedDockerImageName(resolvedImage)
102+
image, originalTag, err := dockerfile.GetStrippedDockerImageName(resolvedImage)
102103
if err != nil {
103104
return false, false, "", nil
104105
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package versions
2+
3+
import (
4+
"github.com/loft-sh/devspace/pkg/devspace/config/versions/latest"
5+
"github.com/loft-sh/devspace/pkg/util/dockerfile"
6+
"github.com/pkg/errors"
7+
)
8+
9+
func adjustConfig(config *latest.Config) error {
10+
for name, v := range config.Vars {
11+
v.Name = name
12+
}
13+
for name, command := range config.Commands {
14+
command.Name = name
15+
}
16+
for name, pullSecret := range config.PullSecrets {
17+
pullSecret.Name = name
18+
}
19+
for name, devPod := range config.Dev {
20+
devPod.Name = name
21+
for c, v := range devPod.Containers {
22+
v.Container = c
23+
}
24+
}
25+
for name, pipeline := range config.Pipelines {
26+
pipeline.Name = name
27+
}
28+
for name, dep := range config.Dependencies {
29+
dep.Name = name
30+
}
31+
if config.Images != nil {
32+
newObjs := map[string]*latest.Image{}
33+
for k, v := range config.Images {
34+
if v != nil {
35+
v.Name = k
36+
image, tag, err := dockerfile.GetStrippedDockerImageName(v.Image)
37+
if err != nil {
38+
return errors.Errorf("error parsing images.%s.image: '%s': %v", k, v.Image, err)
39+
}
40+
if tag != "" {
41+
v.Image = image
42+
oldTags := v.Tags
43+
v.Tags = []string{}
44+
v.Tags = append(v.Tags, tag)
45+
v.Tags = append(v.Tags, oldTags...)
46+
}
47+
48+
newObjs[k] = v
49+
}
50+
}
51+
config.Images = newObjs
52+
}
53+
if config.Deployments != nil {
54+
newObjs := map[string]*latest.DeploymentConfig{}
55+
for k, v := range config.Deployments {
56+
if v != nil {
57+
v.Name = k
58+
newObjs[k] = v
59+
}
60+
}
61+
config.Deployments = newObjs
62+
}
63+
if config.Hooks != nil {
64+
newObjs := []*latest.HookConfig{}
65+
for _, v := range config.Hooks {
66+
if v != nil {
67+
newObjs = append(newObjs, v)
68+
}
69+
}
70+
config.Hooks = newObjs
71+
}
72+
return nil
73+
}

0 commit comments

Comments
 (0)