Libindex Store
The Store
interface implements all necessary persistence methods for
Libindex
to provide its functionality.
package indexer // import "github.com/quay/claircore/internal/indexer"
type Store interface {
Setter
Querier
Indexer
// Close frees any resources associated with the Store.
Close(context.Context) error
}
Store is an interface for dealing with objects libindex needs to persist.
Stores may be implemented per storage backend.
package indexer // import "github.com/quay/claircore/internal/indexer"
type Setter interface {
// PersistManifest must store the presence of a manifest and it's layers into the system.
//
// Typically this will write into identity tables so later methods have a foreign key
// to reference and data integrity is applied.
PersistManifest(ctx context.Context, manifest claircore.Manifest) error
// DeleteManifests removes the manifests indicated by the passed digests
// from the backing store.
DeleteManifests(context.Context, ...claircore.Digest) ([]claircore.Digest, error)
// SetLayerScanned marks the provided layer hash successfully scanned by the provided versioned scanner.
//
// After this method is returned a call to Querier.LayerScanned with the same arguments must return true.
SetLayerScanned(ctx context.Context, hash claircore.Digest, scnr VersionedScanner) error
// RegisterPackageScanners registers the provided scanners with the persistence layer.
RegisterScanners(ctx context.Context, scnrs VersionedScanners) error
// SetIndexReport persists the current state of the IndexReport.
//
// IndexReports maybe in intermediate states to provide feedback for clients. this method should be
// used to communicate scanning state updates. to signal the scan has completely successfully
// see SetIndexFinished.
SetIndexReport(context.Context, *claircore.IndexReport) error
// SetIndexFinished marks a scan successfully completed.
//
// After this method returns a call to Querier.ManifestScanned with the manifest hash represted in the provided IndexReport
// must return true.
//
// Also a call to Querier.IndexReport with the manifest hash represted in the provided IndexReport must return the IndexReport
// in finished state.
SetIndexFinished(ctx context.Context, sr *claircore.IndexReport, scnrs VersionedScanners) error
}
Setter interface provides the method set for required marking events, or
registering components, associated with an Index operation.
package indexer // import "github.com/quay/claircore/internal/indexer"
type Querier interface {
// ManifestScanned returns whether the given manifest was scanned by the provided scanners.
ManifestScanned(ctx context.Context, hash claircore.Digest, scnrs VersionedScanners) (bool, error)
// LayerScanned returns whether the given layer was scanned by the provided scanner.
LayerScanned(ctx context.Context, hash claircore.Digest, scnr VersionedScanner) (bool, error)
// PackagesByLayer gets all the packages found in a layer limited by the provided scanners.
PackagesByLayer(ctx context.Context, hash claircore.Digest, scnrs VersionedScanners) ([]*claircore.Package, error)
// DistributionsByLayer gets all the distributions found in a layer limited by the provided scanners.
DistributionsByLayer(ctx context.Context, hash claircore.Digest, scnrs VersionedScanners) ([]*claircore.Distribution, error)
// RepositoriesByLayer gets all the repositories found in a layer limited by the provided scanners.
RepositoriesByLayer(ctx context.Context, hash claircore.Digest, scnrs VersionedScanners) ([]*claircore.Repository, error)
// IndexReport attempts to retrieve a persisted IndexReport.
IndexReport(ctx context.Context, hash claircore.Digest) (*claircore.IndexReport, bool, error)
// AffectedManifests returns a list of manifest digests which the target vulnerability
// affects.
AffectedManifests(ctx context.Context, v claircore.Vulnerability) ([]claircore.Digest, error)
}
Querier interface provides the method set to ascertain indexed artifacts and
query whether a layer or manifest has been scanned.
package indexer // import "github.com/quay/claircore/internal/indexer"
type Indexer interface {
// IndexPackages indexes a package into the persistence layer.
IndexPackages(ctx context.Context, pkgs []*claircore.Package, layer *claircore.Layer, scnr VersionedScanner) error
// IndexDistributions indexes distributions into the persistence layer.
IndexDistributions(ctx context.Context, dists []*claircore.Distribution, layer *claircore.Layer, scnr VersionedScanner) error
// IndexRepositories indexes repositories into the persistence layer.
IndexRepositories(ctx context.Context, repos []*claircore.Repository, layer *claircore.Layer, scnr VersionedScanner) error
// IndexManifest should index the coalesced manifest's content given an IndexReport.
IndexManifest(ctx context.Context, ir *claircore.IndexReport) error
}
Indexer interface provide the method set required for indexing layer and
manifest contents into a persistent store.