Skip to content

Commit 61fe715

Browse files
committed
Fixed failing tests
1 parent 1d63937 commit 61fe715

File tree

4 files changed

+36
-1
lines changed

4 files changed

+36
-1
lines changed

internal/discovery/discovery.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ type Discovery struct {
121121

122122
// excludeByDefault determines whether to exclude configurations by default (triggered by include flags).
123123
excludeByDefault bool
124+
125+
// ignoreExternalDependencies determines whether to drop dependencies that are outside the working directory.
126+
ignoreExternalDependencies bool
124127
}
125128

126129
// DiscoveryOption is a function that modifies a Discovery.
@@ -268,6 +271,12 @@ func (d *Discovery) WithExcludeByDefault() *Discovery {
268271
return d
269272
}
270273

274+
// WithIgnoreExternalDependencies sets the ignoreExternalDependencies flag to true.
275+
func (d *Discovery) WithIgnoreExternalDependencies() *Discovery {
276+
d.ignoreExternalDependencies = true
277+
return d
278+
}
279+
271280
// WithParserOptions sets custom parser options to be used when parsing configs during discovery.
272281
func (d *Discovery) WithParserOptions(options []hclparse.Option) *Discovery {
273282
d.parserOptions = options
@@ -884,6 +893,12 @@ func (d *DependencyDiscovery) DiscoverDependencies(ctx context.Context, l log.Lo
884893
continue
885894
}
886895

896+
// Respect global ignore external dependencies when present in options
897+
if opts != nil && opts.IgnoreExternalDependencies {
898+
// Skip attaching external dependency entirely
899+
continue
900+
}
901+
887902
ext := &DiscoveredConfig{
888903
Type: ConfigTypeUnit,
889904
Path: depPath,

internal/runner/common/unit.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,9 @@ func (unit *Unit) getPlanFilePath(l log.Logger, opts *options.TerragruntOptions,
110110
l.Warnf("Failed to get absolute path for root working dir %s: %v", base, err)
111111
}
112112
}
113+
113114
dir = filepath.Join(base, dir)
115+
114116
if absDir, err := filepath.Abs(dir); err == nil {
115117
dir = absDir
116118
} else {
@@ -147,6 +149,13 @@ func (unit *Unit) getDependenciesForUnit(unitsMap UnitsMap, terragruntConfigPath
147149

148150
dependencyUnit, foundUnit := unitsMap[dependencyUnitPath]
149151
if !foundUnit {
152+
// If external dependencies are being ignored, skip missing dependencies that are outside the working dir
153+
if unit.TerragruntOptions != nil && unit.TerragruntOptions.IgnoreExternalDependencies {
154+
if !util.HasPathPrefix(dependencyUnitPath, unit.TerragruntOptions.WorkingDir) {
155+
continue
156+
}
157+
}
158+
150159
dependencyErr := UnrecognizedDependencyError{
151160
UnitPath: unit.Path,
152161
DependencyPath: dependencyPath,

internal/runner/common/unit_resolver.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,11 @@ func (r *UnitResolver) resolveDependenciesForUnit(ctx context.Context, l log.Log
489489
// to actually apply those dependencies or just assume they are already applied. Note that this method will NOT fill in
490490
// the Dependencies field of the Unit struct (see the crosslinkDependencies method for that).
491491
func (r *UnitResolver) resolveExternalDependenciesForUnits(ctx context.Context, l log.Logger, unitsMap, unitsAlreadyProcessed UnitsMap, recursionLevel int) (UnitsMap, error) {
492+
// When ignoring external dependencies, do not attempt to resolve or include any.
493+
if r.Stack.TerragruntOptions != nil && r.Stack.TerragruntOptions.IgnoreExternalDependencies {
494+
return UnitsMap{}, nil
495+
}
496+
492497
allExternalDependencies := UnitsMap{}
493498
unitsToSkip := unitsMap.MergeMaps(unitsAlreadyProcessed)
494499

internal/runner/runnerpool/builder.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,20 @@ func Build(ctx context.Context, l log.Logger, terragruntOptions *options.Terragr
1818
d := discovery.
1919
NewDiscovery(terragruntOptions.WorkingDir).
2020
WithOptions(opts).
21-
WithDiscoverExternalDependencies().
2221
WithParseInclude().
2322
WithParseExclude().
2423
WithDiscoverDependencies().
2524
WithSuppressParseErrors().
2625
WithIncludeHiddenDirs([]string{config.StackDir}).
2726
WithDiscoveryContext(&discovery.DiscoveryContext{Cmd: terragruntOptions.TerraformCommand})
2827

28+
// Only discover external dependencies when not explicitly excluded via flag/env.
29+
if terragruntOptions.IgnoreExternalDependencies {
30+
d = d.WithIgnoreExternalDependencies()
31+
} else {
32+
d = d.WithDiscoverExternalDependencies()
33+
}
34+
2935
// Configure discovery to look for the configured Terragrunt file name if provided,
3036
// otherwise fall back to the default filename.
3137
filename := config.DefaultTerragruntConfigPath

0 commit comments

Comments
 (0)