func (ld *v2LayerDescriptor) open(ctx context.Context) (distribution.ReadSeekCloser, error) { if len(ld.src.URLs) == 0 { blobs := ld.repo.Blobs(ctx) return blobs.Open(ctx, ld.digest) } var ( err error rsc distribution.ReadSeekCloser ) // Find the first URL that results in a 200 result code. for _, url := range ld.src.URLs { logrus.Debugf("Pulling %v from foreign URL %v", ld.digest, url) rsc = transport.NewHTTPReadSeeker(http.DefaultClient, url, nil) _, err = rsc.Seek(0, os.SEEK_SET) if err == nil { break } logrus.Debugf("Download for %v failed: %v", ld.digest, err) rsc.Close() rsc = nil } return rsc, err }
func (bs *blobs) Open(ctx context.Context, dgst digest.Digest) (distribution.ReadSeekCloser, error) { stat, err := bs.statter.Stat(ctx, dgst) if err != nil { return nil, err } blobURL, err := bs.ub.BuildBlobURL(bs.name, stat.Digest) if err != nil { return nil, err } return transport.NewHTTPReadSeeker(bs.client, blobURL, stat.Size), nil }
func (bs *blobs) Open(ctx context.Context, dgst digest.Digest) (distribution.ReadSeekCloser, error) { blobURL, err := bs.ub.BuildBlobURL(bs.name, dgst) if err != nil { return nil, err } return transport.NewHTTPReadSeeker(bs.client, blobURL, func(resp *http.Response) error { if resp.StatusCode == http.StatusNotFound { return distribution.ErrBlobUnknown } return HandleErrorResponse(resp) }), nil }
func (r *registry) getBlob(ctx context.Context, name reference.Named, dgst digest.Digest) ([]byte, error) { ref, err := reference.WithDigest(name, dgst) if err != nil { return nil, err } blobURL, err := r.ub.BuildBlobURL(ref) if err != nil { return nil, err } reader := transport.NewHTTPReadSeeker(r.client, blobURL, func(resp *http.Response) error { if resp.StatusCode == http.StatusNotFound { return distribution.ErrBlobUnknown } return client.HandleErrorResponse(resp) }) defer reader.Close() return ioutil.ReadAll(reader) }