Files
trivy/pkg/commands/artifact/scanner.go
2025-03-23 23:47:03 +00:00

125 lines
5.9 KiB
Go

package artifact
import (
"context"
"golang.org/x/xerrors"
"github.com/aquasecurity/trivy/pkg/scan"
)
// imageStandaloneScanService initializes a container image scan service in standalone mode
// $ trivy image alpine:3.15
func imageStandaloneScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeImageScanService(ctx, conf.Target, conf.ArtifactOption.ImageOption, conf.CacheOptions, conf.ArtifactOption)
if err != nil {
return scan.Service{}, func() {}, xerrors.Errorf("unable to initialize an image scan service: %w", err)
}
return s, cleanup, nil
}
// archiveStandaloneScanService initializes an image archive scan srevice in standalone mode
// $ trivy image --input alpine.tar
func archiveStandaloneScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeArchiveScanService(ctx, conf.Target, conf.CacheOptions, conf.ArtifactOption)
if err != nil {
return scan.Service{}, func() {}, xerrors.Errorf("unable to initialize the archive scan service: %w", err)
}
return s, cleanup, nil
}
// imageRemoteScanService initializes a container image scan service in client/server mode
// $ trivy image --server localhost:4954 alpine:3.15
func imageRemoteScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeRemoteImageScanService(ctx, conf.Target, conf.RemoteCacheOptions, conf.ServerOption,
conf.ArtifactOption.ImageOption, conf.ArtifactOption)
if err != nil {
return scan.Service{}, nil, xerrors.Errorf("unable to initialize a remote image scan service: %w", err)
}
return s, cleanup, nil
}
// archiveRemoteScanService initializes an image archive scan service in client/server mode
// $ trivy image --server localhost:4954 --input alpine.tar
func archiveRemoteScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
// Scan tar file
s, cleanup, err := initializeRemoteArchiveScanService(ctx, conf.Target, conf.RemoteCacheOptions, conf.ServerOption, conf.ArtifactOption)
if err != nil {
return scan.Service{}, nil, xerrors.Errorf("unable to initialize the remote archive scan service: %w", err)
}
return s, cleanup, nil
}
// filesystemStandaloneScanService initializes a filesystem scan service in standalone mode
func filesystemStandaloneScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeFilesystemScanService(ctx, conf.Target, conf.CacheOptions, conf.ArtifactOption)
if err != nil {
return scan.Service{}, func() {}, xerrors.Errorf("unable to initialize a filesystem scan service: %w", err)
}
return s, cleanup, nil
}
// filesystemRemoteScanService initializes a filesystem scan service in client/server mode
func filesystemRemoteScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeRemoteFilesystemScanService(ctx, conf.Target, conf.RemoteCacheOptions, conf.ServerOption, conf.ArtifactOption)
if err != nil {
return scan.Service{}, func() {}, xerrors.Errorf("unable to initialize a remote filesystem scan service: %w", err)
}
return s, cleanup, nil
}
// repositoryStandaloneScanService initializes a repository scan service in standalone mode
func repositoryStandaloneScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeRepositoryScanService(ctx, conf.Target, conf.CacheOptions, conf.ArtifactOption)
if err != nil {
return scan.Service{}, func() {}, xerrors.Errorf("unable to initialize a repository scan service: %w", err)
}
return s, cleanup, nil
}
// repositoryRemoteScanService initializes a repository scan service in client/server mode
func repositoryRemoteScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeRemoteRepositoryScanService(ctx, conf.Target, conf.RemoteCacheOptions, conf.ServerOption,
conf.ArtifactOption)
if err != nil {
return scan.Service{}, func() {}, xerrors.Errorf("unable to initialize a remote repository scan service: %w", err)
}
return s, cleanup, nil
}
// sbomStandaloneScanService initializes a SBOM scan service in standalone mode
func sbomStandaloneScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeSBOMScanService(ctx, conf.Target, conf.CacheOptions, conf.ArtifactOption)
if err != nil {
return scan.Service{}, func() {}, xerrors.Errorf("unable to initialize a cycloneDX scan service: %w", err)
}
return s, cleanup, nil
}
// sbomRemoteScanService initializes a SBOM scan service in client/server mode
func sbomRemoteScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeRemoteSBOMScanService(ctx, conf.Target, conf.RemoteCacheOptions, conf.ServerOption, conf.ArtifactOption)
if err != nil {
return scan.Service{}, func() {}, xerrors.Errorf("unable to initialize a remote cycloneDX scan service: %w", err)
}
return s, cleanup, nil
}
// vmStandaloneScanService initializes a VM scan service in standalone mode
func vmStandaloneScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeVMScanService(ctx, conf.Target, conf.CacheOptions, conf.ArtifactOption)
if err != nil {
return scan.Service{}, func() {}, xerrors.Errorf("unable to initialize a vm scan service: %w", err)
}
return s, cleanup, nil
}
// vmRemoteScanService initializes a VM scan service in client/server mode
func vmRemoteScanService(ctx context.Context, conf ScannerConfig) (scan.Service, func(), error) {
s, cleanup, err := initializeRemoteVMScanService(ctx, conf.Target, conf.RemoteCacheOptions, conf.ServerOption, conf.ArtifactOption)
if err != nil {
return scan.Service{}, func() {}, xerrors.Errorf("unable to initialize a remote vm scan service: %w", err)
}
return s, cleanup, nil
}