Anonymous blob mounting
ktarplee opened this issue · comments
Is this an issue of the distribution-spec? 🤔
@Wwwsylvia I'm not sure what you mean. It is not an issue with the distribution spec. The spec gives the client more flexibility in that they do not have to provide the from
field if they do not want to. Maybe oras-go is handling this already but I did not see it when looking at it earlier. It seems like even in the case where the source repo is unknown, we would want to always try a POST to /v2/<name>/blobs/uploads/?mount=<digest>
to try and benefit from a mount.
@ktarplee Thanks for the clarification, I see what you mean now.
blobStore.Mount()
accepts an empty value of from
,
oras-go/registry/remote/repository.go
Lines 770 to 773 in 9b6f321
and oras.Copy
only checks if the sourceRepositories
slice is empty or not but does not validate each sourceRepository
.
Lines 287 to 296 in 9b6f321
So oras-go
technically supports this scenario. Users can do anonymous mounting through something like below:
anonymousMounting := func(ctx context.Context, desc ocispec.Descriptor) ([]string, error) {
return []string{""}, nil
}
opts := oras.CopyOptions{
MountFrom = anonymousMounting
}
desc, err := oras.Copy(ctx, src, tagName, dst, tagName, opts)
If needed, we can make if more user friendly though.