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

Function convertRootfsToOCIArchive

pkg/cmd/image/import.go:154–197  ·  view source on GitHub ↗
(ctx context.Context, client *containerd.Client, r io.ReadCloser, options types.ImageImportOptions, prefix string)

Source from the content-addressed store, hash-verified

152}
153
154func convertRootfsToOCIArchive(ctx context.Context, client *containerd.Client, r io.ReadCloser, options types.ImageImportOptions, prefix string) (io.ReadCloser, error) {
155 defer r.Close()
156
157 ctx, done, err := client.WithLease(ctx, leases.WithRandomID(), leases.WithExpiration(1*time.Hour))
158 if err != nil {
159 return nil, err
160 }
161 defer done(ctx)
162
163 decomp, err := compression.DecompressStream(r)
164 if err != nil {
165 return nil, err
166 }
167 defer decomp.Close()
168
169 cs := client.ContentStore()
170 ref := randomRef("import-layer-")
171 w, err := content.OpenWriter(ctx, cs, content.WithRef(ref))
172 if err != nil {
173 return nil, err
174 }
175 defer w.Close()
176
177 if err := w.Truncate(0); err != nil {
178 return nil, err
179 }
180
181 layerDigest, diffID, layerSize, err := compressAndWriteLayer(ctx, w, decomp)
182 if err != nil {
183 return nil, err
184 }
185
186 imgConfig, configDigest, err := buildImageConfig(diffID, options)
187 if err != nil {
188 return nil, err
189 }
190
191 layerContent, err := readLayerContent(ctx, cs, layerDigest, layerSize)
192 if err != nil {
193 return nil, err
194 }
195
196 return buildDockerArchive(imgConfig, configDigest, layerContent, layerDigest, prefix)
197}
198
199func compressAndWriteLayer(ctx context.Context, w content.Writer, r io.Reader) (digest.Digest, digest.Digest, int64, error) {
200 digester := digest.Canonical.Digester()

Callers 1

ensureOCIArchiveFunction · 0.85

Calls 6

randomRefFunction · 0.85
compressAndWriteLayerFunction · 0.85
buildImageConfigFunction · 0.85
readLayerContentFunction · 0.85
buildDockerArchiveFunction · 0.85
CloseMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…