From bb5d50c60e976acbedee3f545cd9b7a058bb11f6 Mon Sep 17 00:00:00 2001 From: nikpivkin Date: Thu, 24 Oct 2024 19:38:05 +0600 Subject: [PATCH] refactor(helm): use helm package to load charts Signed-off-by: nikpivkin --- pkg/iac/scanners/helm/parser/option.go | 8 +- pkg/iac/scanners/helm/parser/parser.go | 356 ++++++++++-------- pkg/iac/scanners/helm/parser/parser_tar.go | 176 --------- pkg/iac/scanners/helm/parser/parser_test.go | 103 ++--- .../archive-with-symlinks/chart.tar.gz | Bin 312 -> 0 bytes .../archive-with-symlinks/example-0.1.0.tgz | Bin 0 -> 10222 bytes .../multiple-archived-deps/Chart.yaml | 16 +- .../charts/common-2.26.0.tgz | Bin 15573 -> 0 bytes .../charts/mysql-operator-2.2.2.tgz | Bin 0 -> 11892 bytes .../opentelemetry-collector-0.108.0.tgz | Bin 34993 -> 0 bytes .../charts/wordpress-operator-0.12.4.tgz | Bin 0 -> 38731 bytes pkg/iac/scanners/helm/parser/vals.go | 1 + pkg/iac/scanners/helm/scanner.go | 82 +--- pkg/iac/scanners/helm/test/option_test.go | 42 +-- pkg/iac/scanners/helm/test/parser_test.go | 51 ++- pkg/iac/scanners/helm/test/scanner_test.go | 17 +- .../helm/test/testdata/mysql-8.8.26.tar | Bin 284672 -> 0 bytes 17 files changed, 333 insertions(+), 519 deletions(-) delete mode 100644 pkg/iac/scanners/helm/parser/parser_tar.go delete mode 100644 pkg/iac/scanners/helm/parser/testdata/archive-with-symlinks/chart.tar.gz create mode 100644 pkg/iac/scanners/helm/parser/testdata/archive-with-symlinks/example-0.1.0.tgz delete mode 100644 pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/charts/common-2.26.0.tgz create mode 100644 pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/charts/mysql-operator-2.2.2.tgz delete mode 100644 pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/charts/opentelemetry-collector-0.108.0.tgz create mode 100644 pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/charts/wordpress-operator-0.12.4.tgz delete mode 100644 pkg/iac/scanners/helm/test/testdata/mysql-8.8.26.tar diff --git a/pkg/iac/scanners/helm/parser/option.go b/pkg/iac/scanners/helm/parser/option.go index 0f2eae3cc291..27371fd34fa8 100644 --- a/pkg/iac/scanners/helm/parser/option.go +++ b/pkg/iac/scanners/helm/parser/option.go @@ -13,25 +13,25 @@ type Option func(p *Parser) func OptionWithValuesFile(paths ...string) Option { return func(p *Parser) { - p.valuesFiles = paths + p.valueOpts.ValueFiles = paths } } func OptionWithValues(values ...string) Option { return func(p *Parser) { - p.values = values + p.valueOpts.Values = values } } func OptionWithFileValues(values ...string) Option { return func(p *Parser) { - p.fileValues = values + p.valueOpts.FileValues = values } } func OptionWithStringValues(values ...string) Option { return func(p *Parser) { - p.stringValues = values + p.valueOpts.StringValues = values } } diff --git a/pkg/iac/scanners/helm/parser/parser.go b/pkg/iac/scanners/helm/parser/parser.go index cbb73780c0ef..4e17d3cd9b4b 100644 --- a/pkg/iac/scanners/helm/parser/parser.go +++ b/pkg/iac/scanners/helm/parser/parser.go @@ -1,10 +1,12 @@ package parser import ( - "bytes" + "archive/tar" + "compress/gzip" "context" "errors" "fmt" + "io" "io/fs" "path" "path/filepath" @@ -13,7 +15,7 @@ import ( "strings" "github.com/google/uuid" - "gopkg.in/yaml.v3" + "github.com/samber/lo" "helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/chart" "helm.sh/helm/v3/pkg/chart/loader" @@ -28,26 +30,22 @@ import ( var manifestNameRegex = regexp.MustCompile("# Source: [^/]+/(.+)") type Parser struct { - logger *log.Logger - helmClient *action.Install - rootPath string - ChartSource string - filepaths []string - workingFS fs.FS - valuesFiles []string - values []string - fileValues []string - stringValues []string - apiVersions []string - kubeVersion string + logger *log.Logger + helmClient *action.Install + valueOpts ValueOptions + apiVersions []string + kubeVersion string + + vals map[string]any } type ChartFile struct { - TemplateFilePath string - ManifestContent string + ChartPath string + Path string + Content string } -func New(src string, opts ...Option) (*Parser, error) { +func New(opts ...Option) (*Parser, error) { client := action.NewInstall(&action.Configuration{}) client.DryRun = true // don't do anything @@ -55,9 +53,8 @@ func New(src string, opts ...Option) (*Parser, error) { client.ClientOnly = true // don't try to talk to a cluster p := &Parser{ - helmClient: client, - ChartSource: src, - logger: log.WithPrefix("helm parser"), + helmClient: client, + logger: log.WithPrefix("helm parser"), } for _, option := range opts { @@ -77,142 +74,124 @@ func New(src string, opts ...Option) (*Parser, error) { p.helmClient.KubeVersion = kubeVersion } + vals, err := p.valueOpts.MergeValues() + if err != nil { + return nil, err + } + p.vals = vals return p, nil } -func (p *Parser) ParseFS(ctx context.Context, fsys fs.FS, target string) error { - p.workingFS = fsys +type Chart struct { + path string + *chart.Chart +} + +func (p *Parser) ParseFS(ctx context.Context, fsys fs.FS, root string) ([]ChartFile, error) { - if err := fs.WalkDir(p.workingFS, filepath.ToSlash(target), func(filePath string, entry fs.DirEntry, err error) error { - select { - case <-ctx.Done(): - return ctx.Err() - default: + charts, err := p.collectCharts(fsys, root) + if err != nil { + return nil, err + } + + var files []ChartFile + for _, c := range charts { + chartFiles, err := p.renderChart(c) + if err != nil { + p.logger.Error("Failed to render chart", + log.String("name", c.Name()), log.FilePath(c.path), log.Err(err)) + continue } + files = append(files, chartFiles...) + } + + return files, nil +} + +func (p *Parser) collectCharts(fsys fs.FS, root string) ([]Chart, error) { + var charts []Chart + + walkDirFn := func(filePath string, d fs.DirEntry, err error) error { if err != nil { return err } - if entry.IsDir() { + + if d.IsDir() { return nil } - if detection.IsArchive(filePath) && !isDependencyChartArchive(p.workingFS, filePath) { - tarFS, err := p.addTarToFS(filePath) - if errors.Is(err, errSkipFS) { - // an unpacked Chart already exists - return nil - } else if err != nil { - return fmt.Errorf("failed to add tar %q to FS: %w", filePath, err) + switch { + case strings.HasSuffix(filePath, "Chart.yaml"): + c, err := loadChart(fsys, path.Dir(filePath)) + if err != nil { + p.logger.Error("Failed to load chart", log.FilePath(filePath), log.Err(err)) + return fs.SkipDir } - targetPath := filepath.Dir(filePath) - if targetPath == "" { - targetPath = "." + charts = append(charts, Chart{ + Chart: c, + path: path.Dir(filePath), + }) + return fs.SkipDir + case detection.IsZip(filePath): + c, err := loadArchivedChart(fsys, filePath) + if err != nil { + p.logger.Error("Failed to load chart", log.FilePath(filePath), log.Err(err)) + return nil } - if err := p.ParseFS(ctx, tarFS, targetPath); err != nil { - return fmt.Errorf("parse tar FS error: %w", err) + if c == nil { + return nil } - return nil - } else { - return p.addPaths(filePath) + + charts = append(charts, Chart{ + Chart: c, + path: filePath, + }) } - }); err != nil { - return fmt.Errorf("walk dir error: %w", err) - } - return nil -} + return nil + } -func isDependencyChartArchive(fsys fs.FS, archivePath string) bool { - parent := path.Dir(archivePath) - if !strings.HasSuffix(parent, "charts") { - return false + if err := fs.WalkDir(fsys, root, walkDirFn); err != nil { + return nil, err } - _, err := fs.Stat(fsys, path.Join(parent, "..", "Chart.yaml")) - return err == nil + return charts, nil } -func (p *Parser) addPaths(paths ...string) error { - for _, filePath := range paths { - if _, err := fs.Stat(p.workingFS, filePath); err != nil { - return err - } - - if strings.HasSuffix(filePath, "Chart.yaml") && p.rootPath == "" { - if err := p.extractChartName(filePath); err != nil { - return err - } - p.rootPath = filepath.Dir(filePath) - } - p.filepaths = append(p.filepaths, filePath) - } - return nil +func (p *Parser) resolveReleaseName(c *chart.Chart) { + p.helmClient.ReleaseName = extractChartName(c) } -func (p *Parser) extractChartName(chartPath string) error { - - chrt, err := p.workingFS.Open(chartPath) - if err != nil { - return err - } - defer func() { _ = chrt.Close() }() - - var chartContent map[string]any - if err := yaml.NewDecoder(chrt).Decode(&chartContent); err != nil { - // the chart likely has the name templated and so cannot be parsed as yaml - use a temporary name - if dir := filepath.Dir(chartPath); dir != "" && dir != "." { - p.helmClient.ReleaseName = dir - } else { - p.helmClient.ReleaseName = uuid.NewString() - } - return nil +func extractChartName(c *chart.Chart) string { + if c.Metadata == nil { + return uuid.NewString() } - if name, ok := chartContent["name"]; !ok { - return fmt.Errorf("could not extract the chart name from %s", chartPath) - } else { - p.helmClient.ReleaseName = fmt.Sprintf("%v", name) - } - return nil + return c.Metadata.Name } -func (p *Parser) RenderedChartFiles() ([]ChartFile, error) { - workingChart, err := p.loadChart() - if err != nil { - return nil, err +func (p *Parser) renderChart(c Chart) ([]ChartFile, error) { + if req := c.Metadata.Dependencies; req != nil { + if err := action.CheckDependencies(c.Chart, req); err != nil { + return nil, err + } } - workingRelease, err := p.getRelease(workingChart) + r, err := p.getRelease(c) if err != nil { return nil, err } - var manifests bytes.Buffer - _, _ = fmt.Fprintln(&manifests, strings.TrimSpace(workingRelease.Manifest)) - - splitManifests := releaseutil.SplitManifests(manifests.String()) - manifestsKeys := make([]string, 0, len(splitManifests)) - for k := range splitManifests { - manifestsKeys = append(manifestsKeys, k) - } - return p.getRenderedManifests(manifestsKeys, splitManifests), nil + return getRenderedManifests(c.path, r.Manifest), nil } -func (p *Parser) getRelease(chrt *chart.Chart) (*release.Release, error) { - opts := &ValueOptions{ - ValueFiles: p.valuesFiles, - Values: p.values, - FileValues: p.fileValues, - StringValues: p.stringValues, - } +func (p *Parser) getRelease(c Chart) (*release.Release, error) { + p.resolveReleaseName(c.Chart) + defer func() { p.helmClient.ReleaseName = "" }() - vals, err := opts.MergeValues() - if err != nil { - return nil, err - } - r, err := p.helmClient.RunWithContext(context.Background(), chrt, vals) + r, err := p.helmClient.RunWithContext(context.Background(), c.Chart, p.vals) if err != nil { return nil, err } @@ -223,22 +202,67 @@ func (p *Parser) getRelease(chrt *chart.Chart) (*release.Release, error) { return r, nil } -func (p *Parser) loadChart() (*chart.Chart, error) { +func getRenderedManifests(chartPath, manifest string) []ChartFile { + entries := releaseutil.SplitManifests(strings.TrimSpace(manifest)) + keys := lo.Keys(entries) + + sort.Sort(releaseutil.BySplitManifestsOrder(keys)) + + files := make([]ChartFile, 0, len(keys)) + for _, key := range keys { + entry := entries[key] + submatch := manifestNameRegex.FindStringSubmatch(entry) + if len(submatch) == 0 { + continue + } + files = append(files, ChartFile{ + ChartPath: chartPath, + Path: getManifestPath(entry), + Content: entry, + }) + } + return files +} + +func getManifestPath(manifest string) string { + lines := strings.Split(manifest, "\n") + if len(lines) == 0 { + return "unknown.yaml" + } + parts := strings.SplitN(strings.TrimPrefix(lines[0], "# Source: "), "/", 2) + if len(parts) > 1 { + return parts[1] + } + return parts[0] +} + +func loadChart(fsys fs.FS, root string) (*chart.Chart, error) { var files []*loader.BufferedFile - for _, filePath := range p.filepaths { - b, err := fs.ReadFile(p.workingFS, filePath) + walkFn := func(filePath string, d fs.DirEntry, err error) error { if err != nil { - return nil, err + return err + } + + if d.IsDir() { + return nil + } + + b, err := fs.ReadFile(fsys, filePath) + if err != nil { + return err } - filePath = strings.TrimPrefix(filePath, p.rootPath+"/") filePath = filepath.ToSlash(filePath) - files = append(files, &loader.BufferedFile{ - Name: filePath, - Data: b, - }) + filePath = strings.TrimPrefix(filePath, root+"/") + files = append(files, &loader.BufferedFile{Name: filePath, Data: b}) + + return nil + } + + if err := fs.WalkDir(fsys, root, walkFn); err != nil { + return nil, err } c, err := loader.LoadFiles(files) @@ -246,40 +270,64 @@ func (p *Parser) loadChart() (*chart.Chart, error) { return nil, err } - if req := c.Metadata.Dependencies; req != nil { - if err := action.CheckDependencies(c, req); err != nil { - return nil, err - } + return c, err +} + +func loadArchivedChart(fsys fs.FS, filePath string) (*chart.Chart, error) { + ok, err := archivedChartNextToUnpacked(fsys, filePath) + if err != nil { + return nil, err + } + + // skip if unpacked Chart exists + // we can avoid duplicate results if the user packaged Chart and scans this directory + if ok { + return nil, nil } - return c, nil + f, err := fsys.Open(filePath) + if err != nil { + return nil, err + } + defer f.Close() + return loader.LoadArchive(f) } -func (*Parser) getRenderedManifests(manifestsKeys []string, splitManifests map[string]string) []ChartFile { - sort.Sort(releaseutil.BySplitManifestsOrder(manifestsKeys)) - var manifestsToRender []ChartFile - for _, manifestKey := range manifestsKeys { - manifest := splitManifests[manifestKey] - submatch := manifestNameRegex.FindStringSubmatch(manifest) - if len(submatch) == 0 { - continue +func archivedChartNextToUnpacked(fsys fs.FS, filePath string) (bool, error) { + f, err := fsys.Open(filePath) + if err != nil { + return false, err + } + defer f.Close() + + gzr, err := gzip.NewReader(f) + if err != nil { + return false, fmt.Errorf("failed to create gzip reader: %w", err) + } + defer gzr.Close() + tr := tar.NewReader(gzr) + + header, err := tr.Next() + if err != nil { + if errors.Is(err, io.EOF) { + return false, nil } - manifestsToRender = append(manifestsToRender, ChartFile{ - TemplateFilePath: getManifestPath(manifest), - ManifestContent: manifest, - }) + return false, fmt.Errorf("failed to get next entry: %w", err) } - return manifestsToRender -} -func getManifestPath(manifest string) string { - lines := strings.Split(manifest, "\n") - if len(lines) == 0 { - return "unknown.yaml" + name := filepath.ToSlash(header.Name) + + // helm package . or helm package + chartPaths := []string{ + path.Join(filePath, "..", "Chart.yaml"), + path.Join(filePath, "..", path.Dir(name), "Chart.yaml"), } - manifestFilePathParts := strings.SplitN(strings.TrimPrefix(lines[0], "# Source: "), "/", 2) - if len(manifestFilePathParts) > 1 { - return manifestFilePathParts[1] + + for _, chartPath := range chartPaths { + _, err := fs.Stat(fsys, chartPath) + if err == nil { + return true, nil + } } - return manifestFilePathParts[0] + return false, nil } diff --git a/pkg/iac/scanners/helm/parser/parser_tar.go b/pkg/iac/scanners/helm/parser/parser_tar.go deleted file mode 100644 index 8e2ba97a81d2..000000000000 --- a/pkg/iac/scanners/helm/parser/parser_tar.go +++ /dev/null @@ -1,176 +0,0 @@ -package parser - -import ( - "archive/tar" - "compress/gzip" - "errors" - "fmt" - "io" - "io/fs" - "os" - "path" - "path/filepath" - - "github.com/liamg/memoryfs" - - "github.com/aquasecurity/trivy/pkg/iac/detection" - "github.com/aquasecurity/trivy/pkg/log" -) - -var errSkipFS = errors.New("skip parse FS") - -func (p *Parser) addTarToFS(archivePath string) (fs.FS, error) { - tarFS := memoryfs.CloneFS(p.workingFS) - - file, err := tarFS.Open(archivePath) - if err != nil { - return nil, fmt.Errorf("failed to open tar: %w", err) - } - defer file.Close() - - var tr *tar.Reader - - if detection.IsZip(archivePath) { - zipped, err := gzip.NewReader(file) - if err != nil { - return nil, fmt.Errorf("failed to create gzip reader: %w", err) - } - defer zipped.Close() - tr = tar.NewReader(zipped) - } else { - tr = tar.NewReader(file) - } - - checkExistedChart := true - symlinks := make(map[string]string) - - for { - header, err := tr.Next() - if err != nil { - if errors.Is(err, io.EOF) { - break - } - return nil, fmt.Errorf("failed to get next entry: %w", err) - } - - name := filepath.ToSlash(header.Name) - - if checkExistedChart { - // Do not add archive files to FS if the chart already exists - // This can happen when the source chart is located next to an archived chart (with the `helm package` command) - // The first level folder in the archive is equal to the Chart name - if _, err := tarFS.Stat(path.Dir(archivePath) + "/" + path.Dir(name)); err == nil { - return nil, errSkipFS - } - checkExistedChart = false - } - - // get the individual path and extract to the current directory - targetPath := path.Join(path.Dir(archivePath), path.Clean(name)) - - link := filepath.ToSlash(header.Linkname) - - switch header.Typeflag { - case tar.TypeDir: - if err := tarFS.MkdirAll(targetPath, os.FileMode(header.Mode)); err != nil && !errors.Is(err, fs.ErrExist) { - return nil, err - } - case tar.TypeReg: - p.logger.Debug("Unpacking tar entry", log.FilePath(targetPath)) - if err := copyFile(tarFS, tr, targetPath); err != nil { - return nil, err - } - case tar.TypeSymlink: - if path.IsAbs(link) { - p.logger.Debug("Symlink is absolute, skipping", log.String("link", link)) - continue - } - - symlinks[targetPath] = path.Join(path.Dir(targetPath), link) // nolint:gosec // virtual file system is used - default: - return nil, fmt.Errorf("header type %q is not supported", header.Typeflag) - } - } - - for target, link := range symlinks { - if err := copySymlink(tarFS, link, target); err != nil { - return nil, fmt.Errorf("copy symlink error: %w", err) - } - } - - if err := tarFS.Remove(archivePath); err != nil { - return nil, fmt.Errorf("remove tar from FS error: %w", err) - } - - return tarFS, nil -} - -func copySymlink(fsys *memoryfs.FS, src, dst string) error { - fi, err := fsys.Stat(src) - if err != nil { - return nil - } - if fi.IsDir() { - if err := copyDir(fsys, src, dst); err != nil { - return fmt.Errorf("copy dir error: %w", err) - } - return nil - } - - if err := copyFileLazy(fsys, src, dst); err != nil { - return fmt.Errorf("copy file error: %w", err) - } - - return nil -} - -func copyFile(fsys *memoryfs.FS, src io.Reader, dst string) error { - if err := fsys.MkdirAll(path.Dir(dst), fs.ModePerm); err != nil && !errors.Is(err, fs.ErrExist) { - return fmt.Errorf("mkdir error: %w", err) - } - - b, err := io.ReadAll(src) - if err != nil { - return fmt.Errorf("read error: %w", err) - } - - if err := fsys.WriteFile(dst, b, fs.ModePerm); err != nil { - return fmt.Errorf("write file error: %w", err) - } - - return nil -} - -func copyDir(fsys *memoryfs.FS, src, dst string) error { - walkFn := func(filePath string, entry fs.DirEntry, err error) error { - if err != nil { - return err - } - - if entry.IsDir() { - return nil - } - - dst := path.Join(dst, filePath[len(src):]) - - if err := copyFileLazy(fsys, filePath, dst); err != nil { - return fmt.Errorf("copy file error: %w", err) - } - return nil - } - - return fs.WalkDir(fsys, src, walkFn) -} - -func copyFileLazy(fsys *memoryfs.FS, src, dst string) error { - if err := fsys.MkdirAll(path.Dir(dst), fs.ModePerm); err != nil && !errors.Is(err, fs.ErrExist) { - return fmt.Errorf("mkdir error: %w", err) - } - return fsys.WriteLazyFile(dst, func() (io.Reader, error) { - f, err := fsys.Open(src) - if err != nil { - return nil, err - } - return f, nil - }, fs.ModePerm) -} diff --git a/pkg/iac/scanners/helm/parser/parser_test.go b/pkg/iac/scanners/helm/parser/parser_test.go index 16a422d78532..71d32c32b3fe 100644 --- a/pkg/iac/scanners/helm/parser/parser_test.go +++ b/pkg/iac/scanners/helm/parser/parser_test.go @@ -1,4 +1,4 @@ -package parser +package parser_test import ( "context" @@ -6,61 +6,64 @@ import ( "path/filepath" "testing" + "github.com/samber/lo" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" -) - -func TestParseFS(t *testing.T) { - t.Run("source chart is located next to an same archived chart", func(t *testing.T) { - p, err := New(".") - require.NoError(t, err) - require.NoError(t, p.ParseFS(context.TODO(), os.DirFS(filepath.Join("testdata", "chart-and-archived-chart")), ".")) - expectedFiles := []string{ - "my-chart/Chart.yaml", - "my-chart/templates/pod.yaml", - } - assert.Equal(t, expectedFiles, p.filepaths) - }) - - t.Run("archive with symlinks", func(t *testing.T) { - // mkdir -p chart && cd $_ - // touch Chart.yaml - // mkdir -p dir && cp -p Chart.yaml dir/Chart.yaml - // mkdir -p sym-to-file && ln -s ../Chart.yaml sym-to-file/Chart.yaml - // ln -s dir sym-to-dir - // mkdir rec-sym && touch rec-sym/Chart.yaml - // ln -s . ./rec-sym/a - // cd .. && tar -czvf chart.tar.gz chart && rm -rf chart - p, err := New(".") - require.NoError(t, err) + "github.com/aquasecurity/trivy/pkg/iac/scanners/helm/parser" +) - fsys := os.DirFS(filepath.Join("testdata", "archive-with-symlinks")) - require.NoError(t, p.ParseFS(context.TODO(), fsys, "chart.tar.gz")) +func Test_ParseFS(t *testing.T) { - expectedFiles := []string{ - "chart/Chart.yaml", - "chart/dir/Chart.yaml", - "chart/rec-sym/Chart.yaml", - "chart/rec-sym/a/Chart.yaml", - "chart/sym-to-dir/Chart.yaml", - "chart/sym-to-file/Chart.yaml", - } - assert.Equal(t, expectedFiles, p.filepaths) - }) + tests := []struct { + name string + dir string + expected []string + }{ + { + name: "source chart is located next to an same archived chart", + dir: "chart-and-archived-chart", + expected: []string{"templates/pod.yaml"}, + }, + { + name: "archive with symlinks", + // shared-library in "charts" is symlink + // ln -s ../shared-library charts/shared-library + // helm package . + dir: "archive-with-symlinks", + expected: []string{"charts/foo/templates/secret.yaml"}, + }, + { + name: "chart with multiple archived deps", + dir: "multiple-archived-deps", + expected: []string{ + "charts/wordpress-operator/templates/clusterrolebinding.yaml", + "charts/wordpress-operator/templates/service.yaml", + "charts/wordpress-operator/templates/deployment.yaml", + "charts/wordpress-operator/templates/serviceaccount.yaml", + "charts/wordpress-operator/templates/clusterrole.yaml", + "charts/mysql-operator/templates/service_account_operator.yaml", + "charts/mysql-operator/templates/cluster_role_operator.yaml", + "charts/mysql-operator/templates/cluster_role_sidecar.yaml", + "charts/mysql-operator/templates/cluster_role_binding_operator.yaml", + "charts/mysql-operator/templates/service.yaml", + "charts/mysql-operator/templates/deployment.yaml", + "charts/mysql-operator/templates/cluster_kopf_keepering.yaml", + }, + }, + } - t.Run("chart with multiple archived deps", func(t *testing.T) { - p, err := New(".") - require.NoError(t, err) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + p, err := parser.New() + require.NoError(t, err) - fsys := os.DirFS(filepath.Join("testdata", "multiple-archived-deps")) - require.NoError(t, p.ParseFS(context.TODO(), fsys, ".")) + fsys := os.DirFS(filepath.Join("testdata", tt.dir)) + files, err := p.ParseFS(context.TODO(), fsys, ".") + require.NoError(t, err) - expectedFiles := []string{ - "Chart.yaml", - "charts/common-2.26.0.tgz", - "charts/opentelemetry-collector-0.108.0.tgz", - } - assert.Equal(t, expectedFiles, p.filepaths) - }) + paths := lo.Map(files, func(f parser.ChartFile, _ int) string { return f.Path }) + assert.ElementsMatch(t, tt.expected, paths) + }) + } } diff --git a/pkg/iac/scanners/helm/parser/testdata/archive-with-symlinks/chart.tar.gz b/pkg/iac/scanners/helm/parser/testdata/archive-with-symlinks/chart.tar.gz deleted file mode 100644 index a3183710c17f5dd1d04935cfd2731450a83df2b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 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 NP`0=F6#>$#{{>jE+cE$E literal 0 HcmV?d00001 diff --git a/pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/Chart.yaml b/pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/Chart.yaml index 82d6c918088f..9dec2ca5065f 100644 --- a/pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/Chart.yaml +++ b/pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/Chart.yaml @@ -1,14 +1,14 @@ apiVersion: v2 appVersion: "1.1" description: Test Chart -name: y-chart +name: my-chart version: 1.0.0 -kubeVersion: ">=1.21" dependencies: - - name: common - repository: https://charts.bitnami.com/bitnami - version: 2.26.0 - - name: opentelemetry-collector - version: 0.108.0 - repository: https://open-telemetry.github.io/opentelemetry-helm-charts \ No newline at end of file + - name: mysql-operator + version: 2.2.2 + repository: https://mysql.github.io/mysql-operator + + - name: wordpress-operator + version: 0.12.4 + repository: https://helm-charts.bitpoke.io \ No newline at end of file diff --git a/pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/charts/common-2.26.0.tgz b/pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/charts/common-2.26.0.tgz deleted file mode 100644 index 43f85ba36a9160d8ee712e11c22de7732a8f53db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15573 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 literal 0 HcmV?d00001 diff --git a/pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/charts/opentelemetry-collector-0.108.0.tgz b/pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/charts/opentelemetry-collector-0.108.0.tgz deleted file mode 100644 index 0ea88fb482474a833b1ffd9b055e0d643f53e2b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34993 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 X(}Twu8&x6#fdIf*neT%*tcmy!-ZISW diff --git a/pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/charts/wordpress-operator-0.12.4.tgz b/pkg/iac/scanners/helm/parser/testdata/multiple-archived-deps/charts/wordpress-operator-0.12.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4086e9f1a6bab460c3517d28d39566d0226371d2 GIT binary patch literal 38731 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 literal 0 HcmV?d00001 diff --git a/pkg/iac/scanners/helm/parser/vals.go b/pkg/iac/scanners/helm/parser/vals.go index f2589b3caec7..53b13d639560 100644 --- a/pkg/iac/scanners/helm/parser/vals.go +++ b/pkg/iac/scanners/helm/parser/vals.go @@ -109,6 +109,7 @@ func readFile(filePath string) ([]byte, error) { } return data.Bytes(), err } else { + // TODO: use fs package return os.ReadFile(filePath) } } diff --git a/pkg/iac/scanners/helm/scanner.go b/pkg/iac/scanners/helm/scanner.go index daf8f3108628..61eea284d2b3 100644 --- a/pkg/iac/scanners/helm/scanner.go +++ b/pkg/iac/scanners/helm/scanner.go @@ -59,86 +59,37 @@ func (s *Scanner) Name() string { return "Helm" } -func (s *Scanner) ScanFS(ctx context.Context, target fs.FS, path string) (scan.Results, error) { +func (s *Scanner) ScanFS(ctx context.Context, fsys fs.FS, root string) (scan.Results, error) { - if err := s.initRegoScanner(target); err != nil { + if err := s.initRegoScanner(fsys); err != nil { return nil, fmt.Errorf("failed to init rego scanner: %w", err) } - var results []scan.Result - if err := fs.WalkDir(target, path, func(path string, d fs.DirEntry, err error) error { - select { - case <-ctx.Done(): - return ctx.Err() - default: - } - - if err != nil { - return err - } - - if d.IsDir() { - return nil - } - - if detection.IsArchive(path) { - if scanResults, err := s.getScanResults(path, ctx, target); err != nil { - return err - } else { - results = append(results, scanResults...) - } - } - - if strings.HasSuffix(path, "Chart.yaml") { - if scanResults, err := s.getScanResults(filepath.Dir(path), ctx, target); err != nil { - return err - } else { - results = append(results, scanResults...) - } - return fs.SkipDir - } - - return nil - }); err != nil { - return nil, err - } - - return results, nil - -} - -func (s *Scanner) getScanResults(path string, ctx context.Context, target fs.FS) (results []scan.Result, err error) { - helmParser, err := parser.New(path, s.parserOptions...) + p, err := parser.New(s.parserOptions...) if err != nil { return nil, err } - if err := helmParser.ParseFS(ctx, target, path); err != nil { + files, err := p.ParseFS(ctx, fsys, root) + if err != nil { return nil, err } - chartFiles, err := helmParser.RenderedChartFiles() - if err != nil { // not valid helm, maybe some other yaml etc., abort - s.logger.Error( - "Failed to render Chart files", - log.FilePath(path), log.Err(err), - ) - return nil, nil - } + var results scan.Results - for _, file := range chartFiles { + for _, file := range files { file := file - s.logger.Debug("Processing rendered chart file", log.FilePath(file.TemplateFilePath)) + s.logger.Debug("Processing rendered chart file", log.FilePath(file.Path)) - manifests, err := kparser.Parse(ctx, strings.NewReader(file.ManifestContent), file.TemplateFilePath) + manifests, err := kparser.Parse(ctx, strings.NewReader(file.Content), file.Path) if err != nil { return nil, fmt.Errorf("unmarshal yaml: %w", err) } for _, manifest := range manifests { fileResults, err := s.regoScanner.ScanInput(ctx, rego.Input{ - Path: file.TemplateFilePath, + Path: file.Path, Contents: manifest, - FS: target, + FS: fsys, }) if err != nil { return nil, fmt.Errorf("scanning error: %w", err) @@ -146,22 +97,25 @@ func (s *Scanner) getScanResults(path string, ctx context.Context, target fs.FS) if len(fileResults) > 0 { renderedFS := memoryfs.New() - if err := renderedFS.MkdirAll(filepath.Dir(file.TemplateFilePath), fs.ModePerm); err != nil { + if err := renderedFS.MkdirAll(filepath.Dir(file.Path), fs.ModePerm); err != nil { return nil, err } - if err := renderedFS.WriteLazyFile(file.TemplateFilePath, func() (io.Reader, error) { - return strings.NewReader(file.ManifestContent), nil + if err := renderedFS.WriteLazyFile(file.Path, func() (io.Reader, error) { + return strings.NewReader(file.Content), nil }, fs.ModePerm); err != nil { return nil, err } - fileResults.SetSourceAndFilesystem(helmParser.ChartSource, renderedFS, detection.IsArchive(helmParser.ChartSource)) + + fileResults.SetSourceAndFilesystem(file.ChartPath, renderedFS, detection.IsArchive(file.ChartPath)) } results = append(results, fileResults...) } } + return results, nil + } func (s *Scanner) initRegoScanner(srcFS fs.FS) error { diff --git a/pkg/iac/scanners/helm/test/option_test.go b/pkg/iac/scanners/helm/test/option_test.go index 05bf96ee01d3..6486655516cc 100644 --- a/pkg/iac/scanners/helm/test/option_test.go +++ b/pkg/iac/scanners/helm/test/option_test.go @@ -39,22 +39,21 @@ func Test_helm_parser_with_options_with_values_file(t *testing.T) { opts = append(opts, parser.OptionWithValuesFile(test.valuesFile)) } - helmParser, err := parser.New(chartName, opts...) + helmParser, err := parser.New(opts...) require.NoError(t, err) - require.NoError(t, helmParser.ParseFS(context.TODO(), os.DirFS(filepath.Join("testdata", chartName)), ".")) - manifests, err := helmParser.RenderedChartFiles() + manifests, err := helmParser.ParseFS(context.TODO(), os.DirFS(filepath.Join("testdata", chartName)), ".") require.NoError(t, err) assert.Len(t, manifests, 3) for _, manifest := range manifests { - expectedPath := filepath.Join("testdata", "expected", "options", chartName, manifest.TemplateFilePath) + expectedPath := filepath.Join("testdata", "expected", "options", chartName, manifest.Path) expectedContent, err := os.ReadFile(expectedPath) require.NoError(t, err) cleanExpected := strings.ReplaceAll(string(expectedContent), "\r\n", "\n") - cleanActual := strings.ReplaceAll(manifest.ManifestContent, "\r\n", "\n") + cleanActual := strings.ReplaceAll(manifest.Content, "\r\n", "\n") assert.Equal(t, cleanExpected, cleanActual) } @@ -93,23 +92,22 @@ func Test_helm_parser_with_options_with_set_value(t *testing.T) { opts = append(opts, parser.OptionWithValues(test.values)) } - helmParser, err := parser.New(chartName, opts...) + helmParser, err := parser.New(opts...) require.NoError(t, err) - err = helmParser.ParseFS(context.TODO(), os.DirFS(filepath.Join("testdata", chartName)), ".") - require.NoError(t, err) - manifests, err := helmParser.RenderedChartFiles() + + manifests, err := helmParser.ParseFS(context.TODO(), os.DirFS(filepath.Join("testdata", chartName)), ".") require.NoError(t, err) assert.Len(t, manifests, 3) for _, manifest := range manifests { - expectedPath := filepath.Join("testdata", "expected", "options", chartName, manifest.TemplateFilePath) + expectedPath := filepath.Join("testdata", "expected", "options", chartName, manifest.Path) expectedContent, err := os.ReadFile(expectedPath) require.NoError(t, err) cleanExpected := strings.ReplaceAll(string(expectedContent), "\r\n", "\n") - cleanActual := strings.ReplaceAll(manifest.ManifestContent, "\r\n", "\n") + cleanActual := strings.ReplaceAll(manifest.Content, "\r\n", "\n") assert.Equal(t, cleanExpected, cleanActual) } @@ -143,23 +141,22 @@ func Test_helm_parser_with_options_with_api_versions(t *testing.T) { opts = append(opts, parser.OptionWithAPIVersions(test.apiVersions...)) } - helmParser, err := parser.New(chartName, opts...) - require.NoError(t, err) - err = helmParser.ParseFS(context.TODO(), os.DirFS(filepath.Join("testdata", chartName)), ".") + helmParser, err := parser.New(opts...) require.NoError(t, err) - manifests, err := helmParser.RenderedChartFiles() + + manifests, err := helmParser.ParseFS(context.TODO(), os.DirFS(filepath.Join("testdata", chartName)), ".") require.NoError(t, err) assert.Len(t, manifests, 1) for _, manifest := range manifests { - expectedPath := filepath.Join("testdata", "expected", "options", chartName, manifest.TemplateFilePath) + expectedPath := filepath.Join("testdata", "expected", "options", chartName, manifest.Path) expectedContent, err := os.ReadFile(expectedPath) require.NoError(t, err) cleanExpected := strings.TrimSpace(strings.ReplaceAll(string(expectedContent), "\r\n", "\n")) - cleanActual := strings.TrimSpace(strings.ReplaceAll(manifest.ManifestContent, "\r\n", "\n")) + cleanActual := strings.TrimSpace(strings.ReplaceAll(manifest.Content, "\r\n", "\n")) assert.Equal(t, cleanExpected, cleanActual) } @@ -198,26 +195,27 @@ func Test_helm_parser_with_options_with_kube_versions(t *testing.T) { opts = append(opts, parser.OptionWithKubeVersion(test.kubeVersion)) - helmParser, err := parser.New(chartName, opts...) + helmParser, err := parser.New(opts...) if test.expectedError != "" { require.EqualError(t, err, test.expectedError) return } require.NoError(t, err) - require.NoError(t, helmParser.ParseFS(context.TODO(), os.DirFS(filepath.Join("testdata", chartName)), ".")) - manifests, err := helmParser.RenderedChartFiles() + + fsys := os.DirFS(filepath.Join("testdata", chartName)) + manifests, err := helmParser.ParseFS(context.TODO(), fsys, ".") require.NoError(t, err) assert.Len(t, manifests, 1) for _, manifest := range manifests { - expectedPath := filepath.Join("testdata", "expected", "options", chartName, manifest.TemplateFilePath) + expectedPath := filepath.Join("testdata", "expected", "options", chartName, manifest.Path) expectedContent, err := os.ReadFile(expectedPath) require.NoError(t, err) cleanExpected := strings.TrimSpace(strings.ReplaceAll(string(expectedContent), "\r\n", "\n")) - cleanActual := strings.TrimSpace(strings.ReplaceAll(manifest.ManifestContent, "\r\n", "\n")) + cleanActual := strings.TrimSpace(strings.ReplaceAll(manifest.Content, "\r\n", "\n")) assert.Equal(t, cleanExpected, cleanActual) } diff --git a/pkg/iac/scanners/helm/test/parser_test.go b/pkg/iac/scanners/helm/test/parser_test.go index 0116e8b7670b..e8eb09086b5b 100644 --- a/pkg/iac/scanners/helm/test/parser_test.go +++ b/pkg/iac/scanners/helm/test/parser_test.go @@ -33,22 +33,24 @@ func Test_helm_parser(t *testing.T) { for _, test := range tests { t.Run(test.testName, func(t *testing.T) { chartName := test.chartName - helmParser, err := parser.New(chartName) + helmParser, err := parser.New() require.NoError(t, err) - require.NoError(t, helmParser.ParseFS(context.TODO(), os.DirFS("testdata"), chartName)) - manifests, err := helmParser.RenderedChartFiles() + + fsys := os.DirFS("testdata") + manifests, err := helmParser.ParseFS(context.TODO(), fsys, chartName) require.NoError(t, err) assert.Len(t, manifests, 3) for _, manifest := range manifests { - expectedPath := filepath.Join("testdata", "expected", chartName, manifest.TemplateFilePath) + expectedPath := filepath.Join("testdata", "expected", chartName, manifest.Path) expectedContent, err := os.ReadFile(expectedPath) require.NoError(t, err) - got := strings.ReplaceAll(manifest.ManifestContent, "\r\n", "\n") - assert.Equal(t, strings.ReplaceAll(string(expectedContent), "\r\n", "\n"), got) + expected := strings.ReplaceAll(string(expectedContent), "\r\n", "\n") + got := strings.ReplaceAll(manifest.Content, "\r\n", "\n") + assert.Equal(t, expected, got) } }) } @@ -71,9 +73,12 @@ func Test_helm_parser_where_name_non_string(t *testing.T) { t.Logf("Running test: %s", test.testName) - helmParser, err := parser.New(chartName) + helmParser, err := parser.New() + require.NoError(t, err) + + fsys := os.DirFS(filepath.Join("testdata", chartName)) + _, err = helmParser.ParseFS(context.TODO(), fsys, ".") require.NoError(t, err) - require.NoError(t, helmParser.ParseFS(context.TODO(), os.DirFS(filepath.Join("testdata", chartName)), ".")) } } @@ -84,16 +89,6 @@ func Test_tar_is_chart(t *testing.T) { archiveFile string isHelmChart bool }{ - { - testName: "standard tarball", - archiveFile: "mysql-8.8.26.tar", - isHelmChart: true, - }, - { - testName: "gzip tarball with tar.gz extension", - archiveFile: "mysql-8.8.26.tar.gz", - isHelmChart: true, - }, { testName: "broken gzip tarball with tar.gz extension", archiveFile: "aws-cluster-autoscaler-bad.tar.gz", @@ -130,11 +125,6 @@ func Test_helm_tarball_parser(t *testing.T) { chartName string archiveFile string }{ - { - testName: "standard tarball", - chartName: "mysql", - archiveFile: "mysql-8.8.26.tar", - }, { testName: "gzip tarball with tar.gz extension", chartName: "mysql", @@ -159,11 +149,10 @@ func Test_helm_tarball_parser(t *testing.T) { testFs := os.DirFS(testTemp) - helmParser, err := parser.New(test.archiveFile) + helmParser, err := parser.New() require.NoError(t, err) - require.NoError(t, helmParser.ParseFS(context.TODO(), testFs, ".")) - manifests, err := helmParser.RenderedChartFiles() + manifests, err := helmParser.ParseFS(context.TODO(), testFs, ".") require.NoError(t, err) assert.Len(t, manifests, 6) @@ -178,18 +167,20 @@ func Test_helm_tarball_parser(t *testing.T) { } for _, manifest := range manifests { - filename := filepath.Base(manifest.TemplateFilePath) + filename := filepath.Base(manifest.Path) assert.Contains(t, oneOf, filename) - if strings.HasSuffix(manifest.TemplateFilePath, "secrets.yaml") { + if strings.HasSuffix(manifest.Path, "secrets.yaml") { continue } - expectedPath := filepath.Join("testdata", "expected", test.chartName, manifest.TemplateFilePath) + expectedPath := filepath.Join("testdata", "expected", test.chartName, manifest.Path) expectedContent, err := os.ReadFile(expectedPath) require.NoError(t, err) - assert.Equal(t, strings.ReplaceAll(string(expectedContent), "\r\n", "\n"), strings.ReplaceAll(manifest.ManifestContent, "\r\n", "\n")) + expected := strings.ReplaceAll(string(expectedContent), "\r\n", "\n") + got := strings.ReplaceAll(manifest.Content, "\r\n", "\n") + assert.Equal(t, expected, got) } } } diff --git a/pkg/iac/scanners/helm/test/scanner_test.go b/pkg/iac/scanners/helm/test/scanner_test.go index ef751ac2a7b8..794c6f8eee61 100644 --- a/pkg/iac/scanners/helm/test/scanner_test.go +++ b/pkg/iac/scanners/helm/test/scanner_test.go @@ -18,11 +18,6 @@ import ( ) func Test_helm_scanner_with_archive(t *testing.T) { - // TODO(simar7): Figure out why this test fails on Winndows only - if runtime.GOOS == "windows" { - t.Skip("skipping test on windows") - } - tests := []struct { testName string chartName string @@ -30,10 +25,10 @@ func Test_helm_scanner_with_archive(t *testing.T) { archiveName string }{ { - testName: "Parsing tarball 'mysql-8.8.26.tar'", + testName: "Parsing tarball 'mysql-8.8.26.tgz'", chartName: "mysql", - path: filepath.Join("testdata", "mysql-8.8.26.tar"), - archiveName: "mysql-8.8.26.tar", + path: filepath.Join("testdata", "mysql-8.8.26.tgz"), + archiveName: "mysql-8.8.26.tgz", }, } @@ -198,10 +193,10 @@ deny[res] { archiveName string }{ { - testName: "Parsing tarball 'mysql-8.8.26.tar'", + testName: "Parsing tarball 'mysql-8.8.26.tgz'", chartName: "mysql", - path: filepath.Join("testdata", "mysql-8.8.26.tar"), - archiveName: "mysql-8.8.26.tar", + path: filepath.Join("testdata", "mysql-8.8.26.tgz"), + archiveName: "mysql-8.8.26.tgz", }, } diff --git a/pkg/iac/scanners/helm/test/testdata/mysql-8.8.26.tar b/pkg/iac/scanners/helm/test/testdata/mysql-8.8.26.tar deleted file mode 100644 index 53cb6802de42a09509727e267c7a68df02ba3bb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284672 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 z 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