MCPcopy Create free account
hub / github.com/containerd/nerdctl / PullImageWithTransfer

Function PullImageWithTransfer

pkg/imgutil/transfer.go:110–168  ·  view source on GitHub ↗
(ctx context.Context, client *containerd.Client, parsedReference *referenceutil.ImageReference, rawRef string, options types.ImagePullOptions)

Source from the content-addressed store, hash-verified

108}
109
110func PullImageWithTransfer(ctx context.Context, client *containerd.Client, parsedReference *referenceutil.ImageReference, rawRef string, options types.ImagePullOptions) (*EnsuredImage, error) {
111 store, err := prepareImageStore(ctx, parsedReference, options)
112 if err != nil {
113 return nil, err
114 }
115
116 progressWriter := options.Stderr
117 if options.ProgressOutputToStdout {
118 progressWriter = options.Stdout
119 }
120
121 fetcher, cleanup, err := createOCIRegistry(ctx, parsedReference, options.GOptions, false)
122 if err != nil {
123 return nil, err
124 }
125 defer cleanup()
126
127 transferErr := doTransfer(ctx, client, fetcher, store, options.Quiet, progressWriter)
128
129 if transferErr != nil && (errors.Is(transferErr, http.ErrSchemeMismatch) || errutil.IsErrConnectionRefused(transferErr) || errutil.IsErrHTTPResponseToHTTPSClient(transferErr) || errutil.IsErrTLSHandshakeFailure(transferErr)) {
130 if options.GOptions.InsecureRegistry {
131 log.G(ctx).WithError(transferErr).Warnf("server %q does not seem to support HTTPS, falling back to plain HTTP", parsedReference.Domain)
132 fetcher, cleanup2, err := createOCIRegistry(ctx, parsedReference, options.GOptions, true)
133 if err != nil {
134 return nil, err
135 }
136 defer cleanup2()
137 transferErr = doTransfer(ctx, client, fetcher, store, options.Quiet, progressWriter)
138 }
139 }
140
141 if transferErr != nil {
142 return nil, transferErr
143 }
144
145 imageStore := client.ImageService()
146 stored, err := store.Get(ctx, imageStore)
147 if err != nil {
148 return nil, err
149 }
150
151 plMatch := platformutil.NewMatchComparerFromOCISpecPlatformSlice(options.OCISpecPlatform)
152 containerdImage := containerd.NewImageWithPlatform(client, stored, plMatch)
153 imgConfig, err := getImageConfig(ctx, containerdImage)
154 if err != nil {
155 return nil, err
156 }
157
158 snapshotter := options.GOptions.Snapshotter
159 snOpt := getSnapshotterOpts(snapshotter)
160
161 return &EnsuredImage{
162 Ref: rawRef,
163 Image: containerdImage,
164 ImageConfig: *imgConfig,
165 Snapshotter: snapshotter,
166 Remote: snOpt.isRemote(),
167 }, nil

Callers 1

EnsureImageFunction · 0.85

Calls 11

IsErrConnectionRefusedFunction · 0.92
IsErrTLSHandshakeFailureFunction · 0.92
prepareImageStoreFunction · 0.85
createOCIRegistryFunction · 0.85
doTransferFunction · 0.85
getImageConfigFunction · 0.85
getSnapshotterOptsFunction · 0.85
GetMethod · 0.65
isRemoteMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…