Add OCI ref.name to unique key in remotes handler
This allows a pusher to be used for more than one tag without creating a new resolver/pusher. The current implementation checks the ref key tracker status based on type and hash and will skip the push even if the repository reference is unique. Signed-off-by: Phil Estes <estesp@amazon.com>
This commit is contained in:
parent
9a9bd09756
commit
7ae0a60fb5
@ -56,25 +56,32 @@ func WithMediaTypeKeyPrefix(ctx context.Context, mediaType, prefix string) conte
|
|||||||
// used to lookup ongoing processes related to the descriptor. This function
|
// used to lookup ongoing processes related to the descriptor. This function
|
||||||
// may look to the context to namespace the reference appropriately.
|
// may look to the context to namespace the reference appropriately.
|
||||||
func MakeRefKey(ctx context.Context, desc ocispec.Descriptor) string {
|
func MakeRefKey(ctx context.Context, desc ocispec.Descriptor) string {
|
||||||
|
key := desc.Digest.String()
|
||||||
|
if desc.Annotations != nil {
|
||||||
|
if name, ok := desc.Annotations[ocispec.AnnotationRefName]; ok {
|
||||||
|
key = fmt.Sprintf("%s@%s", name, desc.Digest.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if v := ctx.Value(refKeyPrefix{}); v != nil {
|
if v := ctx.Value(refKeyPrefix{}); v != nil {
|
||||||
values := v.(map[string]string)
|
values := v.(map[string]string)
|
||||||
if prefix := values[desc.MediaType]; prefix != "" {
|
if prefix := values[desc.MediaType]; prefix != "" {
|
||||||
return prefix + "-" + desc.Digest.String()
|
return prefix + "-" + key
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch mt := desc.MediaType; {
|
switch mt := desc.MediaType; {
|
||||||
case mt == images.MediaTypeDockerSchema2Manifest || mt == ocispec.MediaTypeImageManifest:
|
case mt == images.MediaTypeDockerSchema2Manifest || mt == ocispec.MediaTypeImageManifest:
|
||||||
return "manifest-" + desc.Digest.String()
|
return "manifest-" + key
|
||||||
case mt == images.MediaTypeDockerSchema2ManifestList || mt == ocispec.MediaTypeImageIndex:
|
case mt == images.MediaTypeDockerSchema2ManifestList || mt == ocispec.MediaTypeImageIndex:
|
||||||
return "index-" + desc.Digest.String()
|
return "index-" + key
|
||||||
case images.IsLayerType(mt):
|
case images.IsLayerType(mt):
|
||||||
return "layer-" + desc.Digest.String()
|
return "layer-" + key
|
||||||
case images.IsKnownConfig(mt):
|
case images.IsKnownConfig(mt):
|
||||||
return "config-" + desc.Digest.String()
|
return "config-" + key
|
||||||
default:
|
default:
|
||||||
log.G(ctx).Warnf("reference for unknown type: %s", mt)
|
log.G(ctx).Warnf("reference for unknown type: %s", mt)
|
||||||
return "unknown-" + desc.Digest.String()
|
return "unknown-" + key
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user