internal

package
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 8, 2024 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Index

Constants

View Source
const (
	KIND_COMPONENT        = errors.KIND_COMPONENT
	KIND_COMPONENTVERSION = "component version"
	KIND_RESOURCE         = "component resource"
	KIND_SOURCE           = "component source"
	KIND_REFERENCE        = compdesc.KIND_REFERENCE
	KIND_REPOSITORYSPEC   = "repository specification"
)
View Source
const CONTEXT_TYPE = "ocm" + datacontext.OCM_CONTEXT_SUFFIX
View Source
const CommonTransportFormat = ctf.Type
View Source
const DEFAULT_BLOBHANDLER_PRIO = 100

Variables

View Source
var DefaultAccessTypeScheme = NewAccessTypeScheme()

DefaultAccessTypeScheme contains all globally known access serializer.

View Source
var DefaultBlobDigesterRegistry = NewBlobDigesterRegistry()
View Source
var DefaultBlobHandlerRegistry = NewBlobHandlerRegistry()
View Source
var DefaultContext = Builder{}.New(datacontext.MODE_SHARED)

DefaultContext is the default context initialized by init functions.

View Source
var DefaultRepositoryDelegationRegistry = NewDelegationRegistry[Context, RepositorySpec]()
View Source
var DefaultRepositorySpecHandlers = NewRepositorySpecHandlers()
View Source
var DefaultRepositoryTypeScheme = NewRepositoryTypeScheme(nil)

DefaultRepositoryTypeScheme contains all globally known access serializer.

Functions

func AppendUnique

func AppendUnique(list *[]BlobDigester, elems ...BlobDigester)

func ErrComponentVersionNotFound

func ErrComponentVersionNotFound(name, version string) error

func ErrComponentVersionNotFoundWrap

func ErrComponentVersionNotFoundWrap(err error, name, version string) error

func MustRegisterBlobHandler

func MustRegisterBlobHandler(handler BlobHandler, opts ...BlobHandlerOption)

func MustRegisterDigester

func MustRegisterDigester(digester BlobDigester, arttypes ...string)

func NewStrictAccessTypeScheme added in v0.3.0

func NewStrictAccessTypeScheme(base ...AccessTypeScheme) runtime.VersionedTypeRegistry[AccessSpec, AccessType]

func RegisterAccessType added in v0.3.0

func RegisterAccessType(atype AccessType)

func RegisterBlobHandler

func RegisterBlobHandler(handler BlobHandler, opts ...BlobHandlerOption)

func RegisterBlobHandlerRegistrationHandler

func RegisterBlobHandlerRegistrationHandler(path string, handler BlobHandlerRegistrationHandler)

func RegisterRepositorySpecHandler

func RegisterRepositorySpecHandler(hdlr RepositorySpecHandler, types ...string)

func RegisterRepositoryType added in v0.3.0

func RegisterRepositoryType(atype RepositoryType)

func SetDefaultDigester added in v0.3.0

func SetDefaultDigester(d BlobDigester)

Types

type AccessMethod

type AccessMethod interface {
	refmgmt.Dup[AccessMethod]
	AccessMethodImpl

	// AsBlobAccess maps a method object into a
	// basic blob access interface.
	// It does not provide a separate reference,
	// closing the blob access with close the
	// access method.
	AsBlobAccess() BlobAccess
}

AccessMethod is used to support independently closable views on an access method implementation, which can be passed around and stored. The original method implementation object is closed once the last view is closed.

type AccessMethodImpl added in v0.5.0

type AccessMethodImpl interface {
	io.Closer
	DataAccess
	MimeType

	IsLocal() bool
	GetKind() string
	AccessSpec() AccessSpec
}

AccessMethodImpl is the implementation interface for access methods provided by access types. It describes the access to a dedicated resource It can allocate external resources, which should be released with the Close() call. Resources SHOULD only be allocated, if the content is accessed via the DataAccess interface to avoid unnecessary effort if the method object is just used to access meta data. It is always wrapped by a view model enabling Dup operations to pass and keep instances on demand.

type AccessProvider added in v0.4.1

type AccessProvider interface {
	GetOCMContext() Context
	ReferenceHint() string

	Access() (AccessSpec, error)
	AccessMethod() (AccessMethod, error)

	GlobalAccess() AccessSpec

	blobaccess.BlobAccessProvider
}

AccessProvider assembled methods provided and used for access methods. It is provided for resources in a component version with the base support implementation in package cpi. But it can also be provided by resource provisioners used to feed the ComponentVersionAccess.SetResourceByAccess or the ComponentVersionAccessSetSourceByAccess method.

type AccessSpec

type AccessSpec interface {
	compdesc.AccessSpec
	Describe(Context) string
	IsLocal(Context) bool
	GlobalAccessSpec(Context) AccessSpec
	// AccessMethodImpl provides an access method implementation for
	// an access spec. This might be a repository local implementation
	// or a global one. It might be implemented directly by the AccessSpec
	// for global AccessMethods or forwarded to the ComponentVersion for
	// local access methods. It may only be forwarded for AccessSpecs stating
	// to be local (IsLocal()==true).
	// This forwarding is necessary because the concrete implementation of
	// the currently used OCM Repository is not known to the AccessSpec.
	AccessMethod(access ComponentVersionAccess) (AccessMethod, error)
	// GetInexpensiveContentVersionIdentity implements a method that attempts to provide an inexpensive identity.
	// Therefore, an identity that can be provided without requiring the entire object (e.g. calculating the digest from
	// the bytes), which would defeat the purpose of caching.
	// It follows the same contract as AccessMethodImpl.
	GetInexpensiveContentVersionIdentity(access ComponentVersionAccess) string
}

AccessSpec is the interface access method specifications must fulfill. The main task is to map the specification to a concrete implementation of the access method for a dedicated component version.

func CreateAccessSpec

func CreateAccessSpec(t runtime.TypedObject) (AccessSpec, error)

func NewGenericAccessSpec

func NewGenericAccessSpec(data []byte, unmarshaler ...runtime.Unmarshaler) (AccessSpec, error)

type AccessSpecDecoder added in v0.3.0

type AccessSpecDecoder = runtime.TypedObjectDecoder[AccessSpec]

type AccessSpecRef

type AccessSpecRef struct {
	// contains filtered or unexported fields
}

func NewAccessSpecRef

func NewAccessSpecRef(spec AccessSpec) *AccessSpecRef

func NewRawAccessSpecRef

func NewRawAccessSpecRef(data []byte, unmarshaler runtime.Unmarshaler) (*AccessSpecRef, error)

func (*AccessSpecRef) AccessMethod

func (a *AccessSpecRef) AccessMethod(access ComponentVersionAccess) (AccessMethod, error)

func (*AccessSpecRef) Describe

func (a *AccessSpecRef) Describe(ctx Context) string

func (*AccessSpecRef) Evaluate

func (a *AccessSpecRef) Evaluate(ctx Context) (AccessSpec, error)

func (*AccessSpecRef) Get added in v0.5.0

func (a *AccessSpecRef) Get() AccessSpec

func (*AccessSpecRef) GetInexpensiveContentVersionIdentity added in v0.3.0

func (a *AccessSpecRef) GetInexpensiveContentVersionIdentity(access ComponentVersionAccess) string

func (*AccessSpecRef) GetKind

func (a *AccessSpecRef) GetKind() string

func (*AccessSpecRef) GetType

func (a *AccessSpecRef) GetType() string

func (*AccessSpecRef) GetVersion

func (a *AccessSpecRef) GetVersion() string

func (*AccessSpecRef) GlobalAccessSpec added in v0.3.0

func (a *AccessSpecRef) GlobalAccessSpec(ctx Context) AccessSpec

func (*AccessSpecRef) IsLocal

func (a *AccessSpecRef) IsLocal(ctx Context) bool

func (*AccessSpecRef) MarshalJSON

func (a *AccessSpecRef) MarshalJSON() ([]byte, error)

MarshalJSON implements a custom json unmarshal method for a unstructured type.

func (*AccessSpecRef) Set

func (a *AccessSpecRef) Set(spec AccessSpec)

func (*AccessSpecRef) UnmarshalJSON

func (a *AccessSpecRef) UnmarshalJSON(data []byte) error

UnmarshalJSON implements a custom json unmarshal method for an access spec ref.

func (*AccessSpecRef) Unwrap added in v0.5.0

func (a *AccessSpecRef) Unwrap() AccessSpec

type AccessTypeProvider added in v0.3.0

type AccessTypeProvider = runtime.KnownTypesProvider[AccessSpec, AccessType]

type AccessTypeScheme

type AccessTypeScheme flagsetscheme.TypeScheme[AccessSpec, AccessType]

func NewAccessTypeScheme

func NewAccessTypeScheme(base ...AccessTypeScheme) AccessTypeScheme

type AddVersionOption added in v0.5.0

type AddVersionOption interface {
	ApplyAddVersionOption(*AddVersionOptions)
}

BlobModificationOption is used for option list allowing both, blob upload and modification options.

func Overwrite added in v0.5.0

func Overwrite(flag ...bool) AddVersionOption

Overwrite enabled the overwrite mode for adding a component version.

type AddVersionOptions added in v0.5.0

type AddVersionOptions struct {
	Overwrite *bool
	BlobUploadOptions
}

func NewAddVersionOptions added in v0.5.0

func NewAddVersionOptions(list ...AddVersionOption) *AddVersionOptions

func (*AddVersionOptions) ApplyAddVersionOption added in v0.5.0

func (o *AddVersionOptions) ApplyAddVersionOption(opts *AddVersionOptions)

func (*AddVersionOptions) ApplyAddVersionOptions added in v0.5.0

func (m *AddVersionOptions) ApplyAddVersionOptions(list ...AddVersionOption)

type ArtifactAccess added in v0.5.0

type ArtifactAccess[M any] interface {
	Meta() *M
	GetComponentVersion() (ComponentVersionAccess, error)
	AccessProvider
}

type BlobAccess

type BlobAccess = blobaccess.BlobAccess

type BlobDigester

type BlobDigester interface {
	GetType() DigesterType
	DetermineDigest(resType string, meth AccessMethod, preferred Hasher) (*DigestDescriptor, error)
}

BlobDigester is the interface for digest providers for dedicated mime types. If found the digest provided by the digester will replace the standard digest calculated for the byte content of the blob.

type BlobDigesterRegistry

type BlobDigesterRegistry interface {
	IsInitial() bool
	// MustRegisterDigester registers a blob digester for a dedicated exact mime type
	//
	Register(handler BlobDigester, restypes ...string) error
	// GetDigester returns the digester for a given type
	GetDigester(typ DigesterType) BlobDigester

	GetDigesterForType(t string) []BlobDigester
	DetermineDigests(typ string, preferred signing.Hasher, registry HasherProvider, acc AccessMethod, typs ...DigesterType) ([]DigestDescriptor, error)

	Copy() BlobDigesterRegistry
}

BlobDigesterRegistry registers blob handlers to use in a dedicated ocm context.

func NewBlobDigesterRegistry

func NewBlobDigesterRegistry(base ...BlobDigesterRegistry) BlobDigesterRegistry

type BlobHandler

type BlobHandler interface {
	// StoreBlob has the chance to decide to store a local blob
	// in a repository specific fashion providing external access.
	// If this is possible and done an appropriate access spec
	// must be returned, if this is not done, nil has to be returned
	// without error
	StoreBlob(blob BlobAccess, artType, hint string, global AccessSpec, ctx StorageContext) (AccessSpec, error)
}

BlobHandler s the interface for a dedicated handling of storing blobs for the LocalBlob access method in a dedicated kind of repository. with the possibility of access by an external distribution spec. (besides of the blob storage as part of a component version). The technical repository to use should be derivable from the chosen component directory or passed together with the storage context. The task of the handler is to store the local blob on its own responsibility and to return an appropriate global access method.

type BlobHandlerConfig

type BlobHandlerConfig = registrations.HandlerConfig

type BlobHandlerKey

type BlobHandlerKey struct {
	ImplementationRepositoryType `json:",inline"`
	ArtifactType                 string `json:"artifactType,omitempty"`
	MimeType                     string `json:"mimeType,omitempty"`
}

BlobHandlerKey is the registration key for BlobHandlers.

func NewBlobHandlerKey

func NewBlobHandlerKey(ctxtype, repotype, artifactType, mimetype string) BlobHandlerKey

func (BlobHandlerKey) ApplyBlobHandlerOptionTo

func (k BlobHandlerKey) ApplyBlobHandlerOptionTo(opts *BlobHandlerOptions)

type BlobHandlerOption

type BlobHandlerOption interface {
	ApplyBlobHandlerOptionTo(*BlobHandlerOptions)
}

func ForArtifactType

func ForArtifactType(artifacttype string) BlobHandlerOption

func ForMimeType

func ForMimeType(mimetype string) BlobHandlerOption

func ForRepo

func ForRepo(ctxtype, repotype string) BlobHandlerOption

func WithPrio

func WithPrio(p int) BlobHandlerOption

type BlobHandlerOptions

type BlobHandlerOptions struct {
	BlobHandlerKey `json:",inline"`
	Priority       int `json:"priority,omitempty"`
}

func NewBlobHandlerOptions

func NewBlobHandlerOptions(olist ...BlobHandlerOption) *BlobHandlerOptions

func (*BlobHandlerOptions) ApplyBlobHandlerOptionTo

func (o *BlobHandlerOptions) ApplyBlobHandlerOptionTo(opts *BlobHandlerOptions)

type BlobHandlerProvider added in v0.5.0

type BlobHandlerProvider interface {
	LookupHandler(sctx StorageContext, artifacttype, mimeType string) BlobHandler
}

BlobHandlerProvider is used to find a blob handler to use adding a resource blob to a component version. The task of the BlobHandler is to reject the upload, provide an (external) access method for the blob or state not to be responsible.

func BlobHandlerProviderForRegistry added in v0.5.0

func BlobHandlerProviderForRegistry(r BlobHandlerRegistry) BlobHandlerProvider

func DefaultBlobHandlerProvider added in v0.5.0

func DefaultBlobHandlerProvider(ctx Context) BlobHandlerProvider

type BlobHandlerRegistry

type BlobHandlerRegistry interface {
	AsHandlerRegistrationRegistry() registrations.HandlerRegistrationRegistry[Context, BlobHandlerOption]

	// BlobHandlerRegistrationRegistry
	registrations.HandlerRegistrationRegistryAccess[Context, BlobHandlerOption]

	IsInitial() bool

	// Copy provides a new independend copy of the registry.
	Copy() BlobHandlerRegistry
	// RegisterBlobHandler registers a blob handler. It must specify either a sole mime type,
	// or a context and repository type, or all three keys.
	Register(handler BlobHandler, opts ...BlobHandlerOption) BlobHandlerRegistry

	// GetHandler returns the handler with the given key.
	GetHandler(key BlobHandlerKey) BlobHandler

	// LookupHandler returns handler trying all matches in the following order:
	//
	// - a handler matching all keys
	// - handlers matching the repo and mime type (from specific to more general by discarding + components)
	//   - with artifact type
	//   - without artifact type
	// - handlers matching artifact type
	// - handlers matching a sole mimetype handler (from specific to more general by discarding + components)
	// - a handler matching the repo
	//
	LookupHandler(repotype ImplementationRepositoryType, artifacttype, mimeType string) BlobHandler
}

BlobHandlerRegistry registers blob handlers to use in a dedicated ocm context.

func NewBlobHandlerRegistry

func NewBlobHandlerRegistry(base ...BlobHandlerRegistry) BlobHandlerRegistry

type BlobModificationOption added in v0.5.0

type BlobModificationOption interface {
	ApplyBlobModificationOption(*BlobModificationOptions)
}

BlobModificationOption is used for option list allowing both, blob upload and modification options.

type BlobModificationOptions added in v0.5.0

type BlobModificationOptions struct {
	BlobUploadOptions
	ModificationOptions
}

func NewBlobModificationOptions added in v0.5.0

func NewBlobModificationOptions(list ...BlobModificationOption) *BlobModificationOptions

func (*BlobModificationOptions) ApplyBlobModificationOption added in v0.5.0

func (o *BlobModificationOptions) ApplyBlobModificationOption(opts *BlobModificationOptions)

func (*BlobModificationOptions) ApplyBlobModificationOptions added in v0.5.0

func (m *BlobModificationOptions) ApplyBlobModificationOptions(list ...BlobModificationOption)

func (*BlobModificationOptions) ApplyBlobUploadOption added in v0.5.0

func (o *BlobModificationOptions) ApplyBlobUploadOption(opts *BlobUploadOptions)

func (*BlobModificationOptions) ApplyModificationOption added in v0.5.0

func (o *BlobModificationOptions) ApplyModificationOption(opts *ModificationOptions)

type BlobOptionImpl added in v0.5.0

type BlobOptionImpl interface {
	BlobUploadOption
	BlobModificationOption
}

func UseBlobHandlers added in v0.5.0

func UseBlobHandlers(h BlobHandlerProvider) BlobOptionImpl

func UseNoDefaultBlobHandlers added in v0.5.0

func UseNoDefaultBlobHandlers(b ...bool) BlobOptionImpl

type BlobUploadOption added in v0.5.0

type BlobUploadOption interface {
	ApplyBlobUploadOption(opts *BlobUploadOptions)
}

type BlobUploadOptions added in v0.5.0

type BlobUploadOptions struct {
	UseNoDefaultIfNotSet *bool               `json:"noDefaultUpload,omitempty"`
	BlobHandlerProvider  BlobHandlerProvider `json:"-"`
}

func NewBlobUploadOptions added in v0.5.0

func NewBlobUploadOptions(list ...BlobUploadOption) *BlobUploadOptions

func (*BlobUploadOptions) ApplyBlobModificationOption added in v0.5.0

func (o *BlobUploadOptions) ApplyBlobModificationOption(opts *BlobModificationOptions)

func (*BlobUploadOptions) ApplyBlobUploadOption added in v0.5.0

func (o *BlobUploadOptions) ApplyBlobUploadOption(opts *BlobUploadOptions)

func (*BlobUploadOptions) ApplyBlobUploadOptions added in v0.5.0

func (m *BlobUploadOptions) ApplyBlobUploadOptions(list ...BlobUploadOption)

type Builder

type Builder struct {
	// contains filtered or unexported fields
}

func (Builder) Bound

func (b Builder) Bound() (Context, context.Context)

func (Builder) New

func (b Builder) New(m ...datacontext.BuilderMode) Context

func (Builder) WithAccessTypeScheme

func (b Builder) WithAccessTypeScheme(scheme AccessTypeScheme) Builder

func (Builder) WithBlobDigesters

func (b Builder) WithBlobDigesters(reg BlobDigesterRegistry) Builder

func (Builder) WithBlobHandlers

func (b Builder) WithBlobHandlers(reg BlobHandlerRegistry) Builder

func (Builder) WithContext

func (b Builder) WithContext(ctx context.Context) Builder

func (Builder) WithCredentials

func (b Builder) WithCredentials(ctx credentials.Context) Builder

func (Builder) WithOCIRepositories

func (b Builder) WithOCIRepositories(ctx oci.Context) Builder

func (Builder) WithRepositoryDelegation added in v0.3.0

func (b Builder) WithRepositoryDelegation(reg RepositoryDelegationRegistry) Builder

func (Builder) WithRepositorySpecHandlers

func (b Builder) WithRepositorySpecHandlers(reg RepositorySpecHandlers) Builder

func (Builder) WithRepositoyTypeScheme

func (b Builder) WithRepositoyTypeScheme(scheme RepositoryTypeScheme) Builder

type ComponentAccess

type ComponentAccess interface {
	resource.ResourceView[ComponentAccess]

	GetContext() Context
	GetName() string

	ListVersions() ([]string, error)
	LookupVersion(version string) (ComponentVersionAccess, error)
	HasVersion(vers string) (bool, error)
	NewVersion(version string, overrides ...bool) (ComponentVersionAccess, error)
	AddVersion(cv ComponentVersionAccess, overrides ...bool) error
	AddVersionOpt(cv ComponentVersionAccess, opts ...AddVersionOption) error

	io.Closer
}

type ComponentLister

type ComponentLister interface {
	// NumComponents returns the number of components found for a prefix
	// If the given prefix does not end with a /, a repository with the
	// prefix name is included
	NumComponents(prefix string) (int, error)

	// GetNamespaces returns the name of namespaces found for a prefix
	// If the given prefix does not end with a /, a repository with the
	// prefix name is included
	GetComponents(prefix string, closure bool) ([]string, error)
}

ComponentLister provides the optional repository list functionality of a repository.

type ComponentReference

type ComponentReference = compdesc.ComponentReference

type ComponentVersionAccess

type ComponentVersionAccess interface {
	resource.ResourceView[ComponentVersionAccess]
	common.VersionedElement
	io.Closer

	GetContext() Context
	Repository() Repository
	GetDescriptor() *compdesc.ComponentDescriptor

	DiscardChanges()
	IsPersistent() bool

	GetProvider() *compdesc.Provider
	SetProvider(provider *compdesc.Provider) error

	GetResources() []ResourceAccess
	GetResource(meta metav1.Identity) (ResourceAccess, error)
	GetResourceIndex(meta metav1.Identity) int
	GetResourceByIndex(i int) (ResourceAccess, error)
	GetResourcesByName(name string, selectors ...compdesc.IdentitySelector) ([]ResourceAccess, error)
	GetResourcesByIdentitySelectors(selectors ...compdesc.IdentitySelector) ([]ResourceAccess, error)
	GetResourcesByResourceSelectors(selectors ...compdesc.ResourceSelector) ([]ResourceAccess, error)
	SetResource(*ResourceMeta, compdesc.AccessSpec, ...ModificationOption) error
	SetResourceAccess(art ResourceAccess, modopts ...BlobModificationOption) error

	GetSources() []SourceAccess
	GetSource(meta metav1.Identity) (SourceAccess, error)
	GetSourceIndex(meta metav1.Identity) int
	GetSourceByIndex(i int) (SourceAccess, error)
	SetSource(*SourceMeta, compdesc.AccessSpec) error
	SetSourceByAccess(art SourceAccess) error

	GetReference(meta metav1.Identity) (ComponentReference, error)
	GetReferenceIndex(meta metav1.Identity) int
	GetReferenceByIndex(i int) (ComponentReference, error)
	GetReferencesByName(name string, selectors ...compdesc.IdentitySelector) (compdesc.References, error)
	GetReferencesByIdentitySelectors(selectors ...compdesc.IdentitySelector) (compdesc.References, error)
	GetReferencesByReferenceSelectors(selectors ...compdesc.ReferenceSelector) (compdesc.References, error)
	SetReference(ref *ComponentReference) error

	// AddBlob adds a local blob and returns an appropriate local access spec.
	AddBlob(blob BlobAccess, artType, refName string, global AccessSpec, opts ...BlobUploadOption) (AccessSpec, error)

	// AdjustResourceAccess is used to modify the access spec. The old and new one MUST refer to the same content.
	AdjustResourceAccess(meta *ResourceMeta, acc compdesc.AccessSpec, opts ...ModificationOption) error
	SetResourceBlob(meta *ResourceMeta, blob BlobAccess, refname string, global AccessSpec, opts ...BlobModificationOption) error
	AdjustSourceAccess(meta *SourceMeta, acc compdesc.AccessSpec) error
	SetSourceBlob(meta *SourceMeta, blob BlobAccess, refname string, global AccessSpec) error

	// AccessMethod provides an access method implementation for
	// an access spec. This might be a repository local implementation
	// or a global one. It might be called by the AccessSpec method
	// to map itself to a local implementation or called directly.
	// If called it should forward the call to the AccessSpec
	// if and only if this specs NOT states to be local IsLocal()==false
	// If the spec states to be local, the repository is responsible for
	// providing a local implementation or return nil if this is
	// not supported by the actual repository type.
	AccessMethod(AccessSpec) (AccessMethod, error)

	// GetInexpensiveContentVersionIdentity implements a method that attempts to provide an inexpensive identity for
	// the specified artifact. Therefore, an identity that can be provided without requiring the entire object (e.g.
	// calculating the digest from the bytes), which would defeat the purpose of caching.
	// It follows the same contract as AccessMethodImpl.
	GetInexpensiveContentVersionIdentity(spec AccessSpec) string

	// Update adds the version with all changes to the component instance it has been created for.
	Update() error
}

type ComponentVersionResolver

type ComponentVersionResolver interface {
	LookupComponentVersion(name string, version string) (ComponentVersionAccess, error)
}

type ConsumerIdentityProvider added in v0.3.0

type ConsumerIdentityProvider = credentials.ConsumerIdentityProvider

ConsumerIdentityProvider is an interface for object requiring credentials, which want to expose the ConsumerId they are usingto request implicit credentials.

type Context

type Context interface {
	datacontext.Context
	config.ContextProvider
	credentials.ContextProvider
	oci.ContextProvider
	ContextProvider

	RepositoryTypes() RepositoryTypeScheme
	AccessMethods() AccessTypeScheme

	RepositorySpecHandlers() RepositorySpecHandlers
	MapUniformRepositorySpec(u *UniformRepositorySpec) (RepositorySpec, error)

	DisableBlobHandlers()
	BlobHandlers() BlobHandlerRegistry
	BlobDigesters() BlobDigesterRegistry

	RepositoryForSpec(spec RepositorySpec, creds ...credentials.CredentialsSource) (Repository, error)
	RepositoryForConfig(data []byte, unmarshaler runtime.Unmarshaler, creds ...credentials.CredentialsSource) (Repository, error)
	RepositorySpecForConfig(data []byte, unmarshaler runtime.Unmarshaler) (RepositorySpec, error)

	AccessSpecForSpec(spec compdesc.AccessSpec) (AccessSpec, error)
	AccessSpecForConfig(data []byte, unmarshaler runtime.Unmarshaler) (AccessSpec, error)

	Encode(AccessSpec, runtime.Marshaler) ([]byte, error)

	GetAlias(name string) RepositorySpec
	SetAlias(name string, spec RepositorySpec)

	GetResolver() ComponentVersionResolver
	AddResolverRule(prefix string, spec RepositorySpec, prio ...int)

	// Finalize finalizes elements implicitly opened during resource operations.
	// For example, registered blob handler may open objects, which are kept open
	// for performance reasons. At the end of a usage finalize should be called
	// to finalize those elements. This method can be called any time by a context
	// user to cleanup temporarily allocated resources. Therefore, only
	// elements should be added to the finalzer, which can be reopened/created
	// on-the fly whenever required.
	Finalize() error
	Finalizer() *Finalizer
}

func DefinedForContext

func DefinedForContext(ctx context.Context) (Context, bool)

func FromContext added in v0.3.0

func FromContext(ctx context.Context) Context

FromContext returns the Context to use for context.Context. This is either an explicit context or the default context.

func FromProvider added in v0.3.0

func FromProvider(p ContextProvider) Context

type ContextProvider

type ContextProvider interface {
	OCMContext() Context
}

func WrapContextProvider added in v0.3.0

func WrapContextProvider(ctx LocalContextProvider) ContextProvider

type DataAccess

type DataAccess = blobaccess.DataAccess

type DelegationRegistry added in v0.3.0

type DelegationRegistry[C any, T runtime.TypedObject] interface {
	Register(name string, decoder PriorityDecoder[C, T])
	Get(name string) PriorityDecoder[C, T]
	Delegations() map[string]PriorityDecoder[C, T]
	Decode(ctx C, data []byte, unmarshaller runtime.Unmarshaler) (T, error)

	Copy() DelegationRegistry[C, T]
}

func NewDelegationRegistry added in v0.3.0

func NewDelegationRegistry[C any, T runtime.TypedObject](base ...DelegationRegistry[C, T]) DelegationRegistry[C, T]

type DigestDescriptor

type DigestDescriptor = metav1.DigestSpec

func NewDigestDescriptor

func NewDigestDescriptor(digest, hashAlgo, normAlgo string) *DigestDescriptor

type DigesterType

type DigesterType struct {
	HashAlgorithm          string
	NormalizationAlgorithm string
}

func (DigesterType) IsInitial added in v0.3.0

func (d DigesterType) IsInitial() bool

func (DigesterType) Normalize

func (d DigesterType) Normalize() DigesterType

func (DigesterType) String added in v0.3.0

func (d DigesterType) String() string

type EvaluatableAccessSpec

type EvaluatableAccessSpec interface {
	AccessSpec
	Evaluate(ctx Context) (AccessSpec, error)
}

type GenericAccessSpec

type GenericAccessSpec struct {
	runtime.UnstructuredVersionedTypedObject `json:",inline"`
}

func ToGenericAccessSpec added in v0.3.0

func ToGenericAccessSpec(spec AccessSpec) (*GenericAccessSpec, error)

func (*GenericAccessSpec) AccessMethod

func (*GenericAccessSpec) Describe

func (s *GenericAccessSpec) Describe(ctx Context) string

func (*GenericAccessSpec) Evaluate

func (s *GenericAccessSpec) Evaluate(ctx Context) (AccessSpec, error)

func (*GenericAccessSpec) GetInexpensiveContentVersionIdentity added in v0.3.0

func (s *GenericAccessSpec) GetInexpensiveContentVersionIdentity(acc ComponentVersionAccess) string

func (*GenericAccessSpec) GlobalAccessSpec added in v0.3.0

func (s *GenericAccessSpec) GlobalAccessSpec(ctx Context) AccessSpec

func (*GenericAccessSpec) IsLocal

func (s *GenericAccessSpec) IsLocal(ctx Context) bool

type GenericRepositorySpec

type GenericRepositorySpec struct {
	runtime.UnstructuredVersionedTypedObject `json:",inline"`
}

func ToGenericRepositorySpec

func ToGenericRepositorySpec(spec RepositorySpec) (*GenericRepositorySpec, error)

func (*GenericRepositorySpec) AsUniformSpec

func (s *GenericRepositorySpec) AsUniformSpec(ctx Context) *UniformRepositorySpec

func (*GenericRepositorySpec) Evaluate

func (s *GenericRepositorySpec) Evaluate(ctx Context) (RepositorySpec, error)

func (*GenericRepositorySpec) Repository

type GlobalAccessProvider added in v0.5.0

type GlobalAccessProvider interface {
	GlobalAccessSpec(ctx Context) AccessSpec
}

GlobalAccessProvider is used to provide a non-local access specification. It may optionally be provided by an access spec.

type Hasher added in v0.4.1

type Hasher = signing.Hasher

Hasher creates a new hash.Hash interface.

type HasherProvider added in v0.4.1

type HasherProvider = signing.HasherProvider

HasherProvider provides access to supported hash methods.

type HintProvider

type HintProvider interface {
	GetReferenceHint(cv ComponentVersionAccess) string
}

HintProvider is used to provide a reference hint for local access method specs. It may optionally be provided by an access spec. When adding blobs to a repository the hint is used by blobhandlers for expanding a blob to a repository specific representation to determine a useful name.

type ImplementationRepositoryType

type ImplementationRepositoryType struct {
	ContextType    string `json:"contextType,omitempty"`
	RepositoryType string `json:"repositoryType,omitempty"`
}

func (ImplementationRepositoryType) IsInitial

func (t ImplementationRepositoryType) IsInitial() bool

func (ImplementationRepositoryType) String

type IntermediateRepositorySpecAspect

type IntermediateRepositorySpecAspect = oci.IntermediateRepositorySpecAspect

type LocalContextProvider added in v0.3.0

type LocalContextProvider interface {
	GetContext() Context
}

type MatchingResolver added in v0.3.0

type MatchingResolver struct {
	// contains filtered or unexported fields
}

func NewMatchingResolver added in v0.3.0

func NewMatchingResolver(ctx ContextProvider, rules ...*ResolverRule) *MatchingResolver

func (*MatchingResolver) AddRule added in v0.3.0

func (r *MatchingResolver) AddRule(prefix string, spec RepositorySpec, prio ...int)

func (*MatchingResolver) Finalize added in v0.3.0

func (r *MatchingResolver) Finalize() error

func (*MatchingResolver) GetRules added in v0.3.0

func (r *MatchingResolver) GetRules() []*ResolverRule

func (*MatchingResolver) LookupComponentVersion added in v0.3.0

func (r *MatchingResolver) LookupComponentVersion(name string, version string) (ComponentVersionAccess, error)

func (*MatchingResolver) OCMContext added in v0.3.0

func (r *MatchingResolver) OCMContext() Context

type MimeType

type MimeType = blobaccess.MimeType

type ModOptionImpl added in v0.5.0

type ModOptionImpl interface {
	ModificationOption
	BlobModificationOption
}

func AcceptExistentDigests added in v0.4.1

func AcceptExistentDigests(flag ...bool) ModOptionImpl

func ModifyResource added in v0.4.1

func ModifyResource(flag ...bool) ModOptionImpl

func SkipDigest deprecated added in v0.4.1

func SkipDigest(flag ...bool) ModOptionImpl

SkipDigest disables digest creation if enabled.

Deprecated: for legacy code, only.

func SkipVerify added in v0.4.1

func SkipVerify(flag ...bool) ModOptionImpl

func WithDefaultHashAlgorithm added in v0.4.1

func WithDefaultHashAlgorithm(algo ...string) ModOptionImpl

func WithHasherProvider added in v0.4.1

func WithHasherProvider(prov HasherProvider) ModOptionImpl

type ModificationOption added in v0.4.1

type ModificationOption interface {
	ApplyModificationOption(opts *ModificationOptions)
}

type ModificationOptions added in v0.4.1

type ModificationOptions struct {
	// ModifyResource disables the modification of signature releveant
	// resource parts.
	ModifyResource *bool

	// AcceptExistentDigests don't validate/recalculate the content digest
	// of resources.
	AcceptExistentDigests *bool

	// DefaultHashAlgorithm is the hash algorithm to use if no specific setting os found
	DefaultHashAlgorithm string

	// HasherProvider is the factory for hash algorithms to use.
	HasherProvider HasherProvider

	// SkipVerify disabled the verification of given digests
	SkipVerify *bool

	// SkipDigest disabled digest creation (for legacy code, only!)
	SkipDigest *bool
}

func NewModificationOptions added in v0.4.1

func NewModificationOptions(list ...ModificationOption) *ModificationOptions

func (*ModificationOptions) ApplyBlobModificationOption added in v0.5.0

func (m *ModificationOptions) ApplyBlobModificationOption(opts *BlobModificationOptions)

func (*ModificationOptions) ApplyModificationOption added in v0.4.1

func (m *ModificationOptions) ApplyModificationOption(opts *ModificationOptions)

func (*ModificationOptions) ApplyModificationOptions added in v0.4.1

func (m *ModificationOptions) ApplyModificationOptions(list ...ModificationOption) *ModificationOptions

func (*ModificationOptions) GetHasher added in v0.4.1

func (m *ModificationOptions) GetHasher(algo ...string) Hasher

func (*ModificationOptions) IsAcceptExistentDigests added in v0.4.1

func (m *ModificationOptions) IsAcceptExistentDigests() bool

func (*ModificationOptions) IsModifyResource added in v0.4.1

func (m *ModificationOptions) IsModifyResource() bool

func (*ModificationOptions) IsSkipDigest added in v0.4.1

func (m *ModificationOptions) IsSkipDigest() bool

func (*ModificationOptions) IsSkipVerify added in v0.4.1

func (m *ModificationOptions) IsSkipVerify() bool

type MultiBlobHandler

type MultiBlobHandler []BlobHandler

MultiBlobHandler is a BlobHandler consisting of a sequence of handlers.

func (MultiBlobHandler) Len

func (m MultiBlobHandler) Len() int

func (MultiBlobHandler) Less

func (m MultiBlobHandler) Less(i, j int) bool

func (MultiBlobHandler) StoreBlob

func (m MultiBlobHandler) StoreBlob(blob BlobAccess, artType, hint string, global AccessSpec, ctx StorageContext) (AccessSpec, error)

func (MultiBlobHandler) Swap

func (m MultiBlobHandler) Swap(i, j int)

type PrioBlobHandler

type PrioBlobHandler struct {
	BlobHandler
	Prio int
}

type PriorityDecoder added in v0.3.0

type PriorityDecoder[C any, T runtime.TypedObject] interface {
	Decode(ctx C, data []byte, unmarshaler runtime.Unmarshaler) (T, error)
	Priority() int
}

type Repository

type Repository interface {
	resource.ResourceView[Repository]
	RepositoryImpl

	NewComponentVersion(comp, version string, overrides ...bool) (ComponentVersionAccess, error)
	AddComponentVersion(cv ComponentVersionAccess, overrides ...bool) error
}

type RepositoryCache added in v0.3.0

type RepositoryCache struct {
	// contains filtered or unexported fields
}

func NewRepositoryCache added in v0.3.0

func NewRepositoryCache() *RepositoryCache

func (*RepositoryCache) Finalize added in v0.3.0

func (c *RepositoryCache) Finalize() error

func (*RepositoryCache) LookupRepository added in v0.3.0

func (c *RepositoryCache) LookupRepository(ctx Context, spec RepositorySpec) (Repository, error)

type RepositoryDelegationRegistry added in v0.3.0

type RepositoryDelegationRegistry = DelegationRegistry[Context, RepositorySpec]

RepositoryDelegationRegistry is used to register handlers able to dynamically enrich the set of available OCM repository types, which are supported without explicit registration at the OCM repository type registry. The definition of such types is *delegated* to the delegation handler. For example, it is used to fade in all the OCI repositories types provided by an OCI context and mapped by the genericocireg repository mapping. It is used as default decoder for the OCM repository type scheme. The encoding is done by the spec objects on their own behalf. Therefore, multi version spec types MUST correctly implement the MarshalJSOM method on the internal version.

type RepositoryImpl added in v0.3.0

type RepositoryImpl interface {
	GetContext() Context

	GetSpecification() RepositorySpec
	ComponentLister() ComponentLister

	ExistsComponentVersion(name string, version string) (bool, error)
	LookupComponentVersion(name string, version string) (ComponentVersionAccess, error)
	LookupComponent(name string) (ComponentAccess, error)

	Close() error
}

type RepositorySpec

type RepositorySpec interface {
	runtime.VersionedTypedObject

	AsUniformSpec(Context) *UniformRepositorySpec
	Repository(Context, credentials.Credentials) (Repository, error)
}

func CreateRepositorySpec

func CreateRepositorySpec(t runtime.TypedObject) (RepositorySpec, error)

func NewGenericRepositorySpec

func NewGenericRepositorySpec(data []byte, unmarshaler runtime.Unmarshaler) (RepositorySpec, error)

type RepositorySpecDecoder added in v0.3.0

type RepositorySpecDecoder = runtime.TypedObjectDecoder[RepositorySpec]

type RepositorySpecHandler

type RepositorySpecHandler interface {
	MapReference(ctx Context, u *UniformRepositorySpec) (RepositorySpec, error)
}

type RepositorySpecHandlers

type RepositorySpecHandlers interface {
	Register(hdlr RepositorySpecHandler, types ...string)
	Copy() RepositorySpecHandlers
	KnownTypeNames() []string
	GetHandlers(typ string) []RepositorySpecHandler
	MapUniformRepositorySpec(ctx Context, u *UniformRepositorySpec) (RepositorySpec, error)
}

func NewRepositorySpecHandlers

func NewRepositorySpecHandlers() RepositorySpecHandlers

type RepositoryType

type RepositoryType interface {
	runtime.VersionedTypedObjectType[RepositorySpec]
}

type RepositoryTypeProvider added in v0.3.0

type RepositoryTypeProvider = runtime.KnownTypesProvider[RepositorySpec, RepositoryType]

type RepositoryTypeScheme

type RepositoryTypeScheme interface {
	runtime.TypeScheme[RepositorySpec, RepositoryType]
}

func NewRepositoryTypeScheme

func NewRepositoryTypeScheme(defaultDecoder RepositorySpecDecoder, base ...RepositoryTypeScheme) RepositoryTypeScheme

func NewStrictRepositoryTypeScheme added in v0.3.0

func NewStrictRepositoryTypeScheme(base ...RepositoryTypeScheme) RepositoryTypeScheme

type ResolverRule added in v0.3.0

type ResolverRule struct {
	// contains filtered or unexported fields
}

func NewResolverRule added in v0.3.0

func NewResolverRule(prefix string, spec RepositorySpec, prio ...int) *ResolverRule

func (*ResolverRule) Compare added in v0.3.0

func (r *ResolverRule) Compare(o *ResolverRule) int

func (*ResolverRule) GetPrefix added in v0.3.0

func (r *ResolverRule) GetPrefix() string

func (*ResolverRule) GetPriority added in v0.3.0

func (r *ResolverRule) GetPriority() int

func (*ResolverRule) GetSpecification added in v0.3.0

func (r *ResolverRule) GetSpecification() RepositorySpec

func (*ResolverRule) Match added in v0.3.0

func (r *ResolverRule) Match(name string) bool

type ResourceAccess

type ResourceAccess = ArtifactAccess[ResourceMeta]

type ResourceMeta

type ResourceMeta = compdesc.ResourceMeta

type SourceAccess

type SourceAccess = ArtifactAccess[SourceMeta]

type SourceMeta

type SourceMeta = compdesc.SourceMeta

type StorageContext

type StorageContext interface {
	GetContext() Context
	TargetComponentName() string
	TargetComponentRepository() Repository
	GetImplementationRepositoryType() ImplementationRepositoryType
}

StorageContext is an object describing the storage context used for the mapping of a component repository to a base repository (e.g. oci api) It depends on the Context type of the used base repository.

type UniformRepositorySpec

type UniformRepositorySpec struct {
	// Type
	Type string `json:"type,omitempty"`
	// Host is the hostname of an ocm ref.
	Host string `json:"host,omitempty"`
	// SubPath is the sub path spec used to host component versions
	SubPath string `json:"subPath,omitempty"`
	// Info is the file path used to host ctf component versions
	Info string `json:"filePath,omitempty"`

	// CreateIfMissing indicates whether a file based or dynamic repo should be created if it does not exist
	CreateIfMissing bool `json:"createIfMissing,omitempty"`
	// TypeHintshould be set if CreateIfMissing is true to help to decide what kind of repo to create
	TypeHint string `json:"typeHint,omitempty"`
}

UniformRepositorySpec is generic specification of the repository for handling as part of standard references.

func UniformRepositorySpecForUnstructured added in v0.3.0

func UniformRepositorySpecForUnstructured(un *runtime.UnstructuredVersionedTypedObject) *UniformRepositorySpec

func (*UniformRepositorySpec) CredHost

func (r *UniformRepositorySpec) CredHost() string

CredHost fallback to legacy docker domain if applicable this is how containerd translates the old domain for DockerHub to the new one, taken from containerd/reference/docker/reference.go:674.

func (*UniformRepositorySpec) String

func (u *UniformRepositorySpec) String() string

type UnknownAccessSpec

type UnknownAccessSpec struct {
	runtime.UnstructuredVersionedTypedObject `json:",inline"`
}

func (*UnknownAccessSpec) AccessMethod

func (*UnknownAccessSpec) Describe

func (s *UnknownAccessSpec) Describe(ctx Context) string

func (*UnknownAccessSpec) GetInexpensiveContentVersionIdentity added in v0.3.0

func (s *UnknownAccessSpec) GetInexpensiveContentVersionIdentity(ComponentVersionAccess) string

func (*UnknownAccessSpec) GlobalAccessSpec added in v0.3.0

func (_ *UnknownAccessSpec) GlobalAccessSpec(Context) AccessSpec

func (*UnknownAccessSpec) IsLocal

func (_ *UnknownAccessSpec) IsLocal(Context) bool

func (*UnknownAccessSpec) IsUnknown added in v0.3.0

func (_ *UnknownAccessSpec) IsUnknown() bool

type UnknownRepositorySpec

type UnknownRepositorySpec struct {
	runtime.UnstructuredVersionedTypedObject `json:",inline"`
}

func (*UnknownRepositorySpec) AsUniformSpec

func (*UnknownRepositorySpec) IsUnknown added in v0.3.0

func (_ *UnknownRepositorySpec) IsUnknown() bool

func (*UnknownRepositorySpec) Repository

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL