mirror of
https://github.com/aquasecurity/trivy.git
synced 2025-12-23 07:29:00 -08:00
125 lines
5.9 KiB
Go
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
|
|
}
|