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