storageReferencesFromArchiveReader returns a slice of image references inside the archive reader. A docker archive may include more than one image and this method allows for extracting them into containers storage references which can later be used from copying.
(ctx context.Context, readerRef types.ImageReference, reader *dockerArchiveTransport.Reader)
| 269 | // method allows for extracting them into containers storage references which |
| 270 | // can later be used from copying. |
| 271 | func (r *Runtime) storageReferencesReferencesFromArchiveReader(ctx context.Context, readerRef types.ImageReference, reader *dockerArchiveTransport.Reader) ([]types.ImageReference, []string, error) { |
| 272 | destNames, err := reader.ManifestTagsForReference(readerRef) |
| 273 | if err != nil { |
| 274 | return nil, nil, err |
| 275 | } |
| 276 | |
| 277 | var imageNames []string |
| 278 | if len(destNames) == 0 { |
| 279 | destName, err := getImageID(ctx, readerRef, &r.systemContext) |
| 280 | if err != nil { |
| 281 | return nil, nil, err |
| 282 | } |
| 283 | destNames = append(destNames, destName) |
| 284 | // Make sure the image can be loaded after the pull by |
| 285 | // replacing the @ with sha256:. |
| 286 | imageNames = append(imageNames, "sha256:"+destName[1:]) |
| 287 | } else { |
| 288 | for i := range destNames { |
| 289 | ref, err := NormalizeName(destNames[i]) |
| 290 | if err != nil { |
| 291 | return nil, nil, err |
| 292 | } |
| 293 | destNames[i] = ref.String() |
| 294 | } |
| 295 | imageNames = destNames |
| 296 | } |
| 297 | |
| 298 | references := []types.ImageReference{} |
| 299 | for _, destName := range destNames { |
| 300 | destRef, err := storageTransport.Transport.ParseStoreReference(r.store, destName) |
| 301 | if err != nil { |
| 302 | return nil, nil, errors.Wrapf(err, "error parsing dest reference name %#v", destName) |
| 303 | } |
| 304 | references = append(references, destRef) |
| 305 | } |
| 306 | |
| 307 | return references, imageNames, nil |
| 308 | } |
| 309 | |
| 310 | // copyFromDockerArchive copies one image from the specified reference. |
| 311 | func (r *Runtime) copyFromDockerArchive(ctx context.Context, ref types.ImageReference, options *CopyOptions) ([]string, error) { |
no test coverage detected