github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/terraform/parser/module_retrieval.go (about) 1 package parser 2 3 import ( 4 "context" 5 "fmt" 6 "io/fs" 7 8 "github.com/khulnasoft-lab/defsec/pkg/scanners/terraform/parser/resolvers" 9 ) 10 11 type ModuleResolver interface { 12 Resolve(context.Context, fs.FS, resolvers.Options) (filesystem fs.FS, prefix string, downloadPath string, applies bool, err error) 13 } 14 15 var defaultResolvers = []ModuleResolver{ 16 resolvers.Cache, 17 resolvers.Local, 18 resolvers.Remote, 19 resolvers.Registry, 20 } 21 22 func resolveModule(ctx context.Context, current fs.FS, opt resolvers.Options) (filesystem fs.FS, sourcePrefix string, downloadPath string, err error) { 23 opt.Debug("Resolving module '%s' with source: '%s'...", opt.Name, opt.Source) 24 for _, resolver := range defaultResolvers { 25 if filesystem, prefix, path, applies, err := resolver.Resolve(ctx, current, opt); err != nil { 26 return nil, "", "", err 27 } else if applies { 28 opt.Debug("Module path is %s", path) 29 return filesystem, prefix, path, nil 30 } 31 } 32 return nil, "", "", fmt.Errorf("failed to resolve module '%s' with source: %s", opt.Name, opt.Source) 33 }