Skip to content

Commit 28e883f

Browse files
authored
Merge pull request #2086 from mcastellini/print_eager_vars
Resolve all config paths at the same time for devspace print
2 parents f0d24b6 + 5cefed1 commit 28e883f

4 files changed

Lines changed: 51 additions & 8 deletions

File tree

cmd/print.go

Lines changed: 5 additions & 2 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/loader"
78
"github.com/loft-sh/devspace/pkg/devspace/config/versions/latest"
89
devspacecontext "github.com/loft-sh/devspace/pkg/devspace/context"
910
"github.com/loft-sh/devspace/pkg/devspace/dependency"
@@ -87,8 +88,10 @@ func (cmd *PrintCmd) Run(f factory.Factory) error {
8788
log.Warnf("Unable to create new kubectl client: %v", err)
8889
}
8990

91+
parser := loader.NewEagerParser()
92+
9093
// load config
91-
config, err := configLoader.Load(context.Background(), client, configOptions, log)
94+
config, err := configLoader.LoadWithParser(context.Background(), nil, client, parser, configOptions, log)
9295
if err != nil {
9396
return err
9497
}
@@ -99,7 +102,7 @@ func (cmd *PrintCmd) Run(f factory.Factory) error {
99102
WithKubeClient(client)
100103

101104
// resolve dependencies
102-
dependencies, err := dependency.NewManager(ctx, configOptions).ResolveAll(ctx, dependency.ResolveOptions{})
105+
dependencies, err := dependency.NewManagerWithParser(ctx, configOptions, parser).ResolveAll(ctx, dependency.ResolveOptions{})
103106
if err != nil {
104107
log.Warnf("Error resolving dependencies: %v", err)
105108
}

pkg/devspace/config/loader/parser.go

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type defaultParser struct{}
2929

3030
func (d *defaultParser) Parse(ctx context.Context, originalRawConfig map[string]interface{}, rawConfig map[string]interface{}, resolver variable.Resolver, log log.Logger) (*latest.Config, map[string]interface{}, error) {
3131
// delete the commands, since we don't need it in a normal scenario
32-
return fillVariablesAndParse(ctx, resolver, rawConfig, log)
32+
return fillVariablesExcludeAndParse(ctx, resolver, rawConfig, log)
3333
}
3434

3535
func NewCommandsPipelinesParser() Parser {
@@ -45,7 +45,7 @@ func (c *commandsPipelinesParser) Parse(ctx context.Context, originalRawConfig m
4545
return nil, nil, err
4646
}
4747

48-
return fillVariablesAndParse(ctx, resolver, preparedConfig, log)
48+
return fillVariablesExcludeAndParse(ctx, resolver, preparedConfig, log)
4949
}
5050

5151
func NewCommandsParser() Parser {
@@ -61,7 +61,7 @@ func (c *commandsParser) Parse(ctx context.Context, originalRawConfig map[string
6161
return nil, nil, err
6262
}
6363

64-
return fillVariablesAndParse(ctx, resolver, preparedConfig, log)
64+
return fillVariablesExcludeAndParse(ctx, resolver, preparedConfig, log)
6565
}
6666

6767
func NewProfilesParser() Parser {
@@ -106,9 +106,27 @@ func (p *profilesParser) Parse(ctx context.Context, originalRawConfig map[string
106106
return retConfig, rawMap, nil
107107
}
108108

109-
func fillVariablesAndParse(ctx context.Context, resolver variable.Resolver, preparedConfig map[string]interface{}, log log.Logger) (*latest.Config, map[string]interface{}, error) {
109+
func NewEagerParser() Parser {
110+
return &eagerParser{}
111+
}
112+
113+
type eagerParser struct{}
114+
115+
func (e *eagerParser) Parse(ctx context.Context, originalRawConfig map[string]interface{}, rawConfig map[string]interface{}, resolver variable.Resolver, log log.Logger) (*latest.Config, map[string]interface{}, error) {
116+
return fillAllVariablesAndParse(ctx, resolver, rawConfig, log)
117+
}
118+
119+
func fillAllVariablesAndParse(ctx context.Context, resolver variable.Resolver, preparedConfig map[string]interface{}, log log.Logger) (*latest.Config, map[string]interface{}, error) {
120+
return fillVariablesAndParse(ctx, resolver, preparedConfig, log)
121+
}
122+
123+
func fillVariablesExcludeAndParse(ctx context.Context, resolver variable.Resolver, preparedConfig map[string]interface{}, log log.Logger) (*latest.Config, map[string]interface{}, error) {
124+
return fillVariablesAndParse(ctx, resolver, preparedConfig, log, runtime.Locations...)
125+
}
126+
127+
func fillVariablesAndParse(ctx context.Context, resolver variable.Resolver, preparedConfig map[string]interface{}, log log.Logger, excludedPaths ...string) (*latest.Config, map[string]interface{}, error) {
110128
// fill in variables and expressions (leave out
111-
preparedConfigInterface, err := resolver.FillVariablesExclude(ctx, preparedConfig, runtime.Locations)
129+
preparedConfigInterface, err := resolver.FillVariablesExclude(ctx, preparedConfig, excludedPaths)
112130
if err != nil {
113131
return nil, nil, err
114132
}

pkg/devspace/dependency/manager.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ func NewManager(ctx devspacecontext.Context, configOptions *loader.ConfigOptions
3131
}
3232
}
3333

34+
func NewManagerWithParser(ctx devspacecontext.Context, configOptions *loader.ConfigOptions, parser loader.Parser) Manager {
35+
return &manager{
36+
resolver: NewResolver(ctx, configOptions).WithParser(parser),
37+
}
38+
}
39+
3440
type ResolveOptions struct {
3541
SkipDependencies []string
3642
Dependencies []string

pkg/devspace/dependency/resolver.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
// ResolverInterface defines the resolver interface that takes dependency configs and resolves them
2525
type ResolverInterface interface {
2626
Resolve(ctx devspacecontext.Context) ([]types.Dependency, error)
27+
WithParser(parser loader.Parser) ResolverInterface
2728
}
2829

2930
// Resolver implements the resolver interface
@@ -32,6 +33,7 @@ type resolver struct {
3233

3334
BaseCache localcache.Cache
3435
BaseConfig *latest.Config
36+
BaseParser loader.Parser
3537

3638
ConfigOptions *loader.ConfigOptions
3739
}
@@ -90,6 +92,16 @@ func (r *resolver) Resolve(ctx devspacecontext.Context) ([]types.Dependency, err
9092
return children, nil
9193
}
9294

95+
func (r *resolver) WithParser(parser loader.Parser) ResolverInterface {
96+
if r == nil {
97+
return nil
98+
}
99+
100+
n := *r
101+
n.BaseParser = parser
102+
return &n
103+
}
104+
93105
func (r *resolver) resolveRecursive(ctx devspacecontext.Context, basePath, parentConfigName string, currentDependency *Dependency, dependencies []*latest.DependencyConfig) error {
94106
if currentDependency != nil {
95107
currentDependency.children = []types.Dependency{}
@@ -206,7 +218,11 @@ func (r *resolver) resolveDependency(ctx devspacecontext.Context, dependencyConf
206218
return err
207219
}
208220

209-
dConfigWrapper, err = configLoader.Load(ctx.Context(), client, cloned, ctx.Log())
221+
if r.BaseParser == nil {
222+
dConfigWrapper, err = configLoader.Load(ctx.Context(), client, cloned, ctx.Log())
223+
} else {
224+
dConfigWrapper, err = configLoader.LoadWithParser(ctx.Context(), nil, client, r.BaseParser, cloned, ctx.Log())
225+
}
210226
if err != nil {
211227
return errors.Wrap(err, fmt.Sprintf("loading config for dependency %s", dependencyName))
212228
}

0 commit comments

Comments
 (0)