mirror of
https://github.com/containers/podman.git
synced 2025-06-30 15:49:03 +08:00
Fixes podman save fails when specifying an image using a digest #5234
Adds check to parse normalized name and create docker archive dst reference for tagged untagged image. Relevant test case added. Signed-off-by: Sujil02 <sushah@redhat.com>
This commit is contained in:
@ -1487,14 +1487,14 @@ func (i *Image) Save(ctx context.Context, source, format, output string, moreTag
|
||||
}
|
||||
manifestType = manifest.DockerV2Schema2MediaType
|
||||
case "docker-archive", "":
|
||||
dst := output
|
||||
destImageName := imageNameForSaveDestination(i, source)
|
||||
if destImageName != "" {
|
||||
dst = fmt.Sprintf("%s:%s", dst, destImageName)
|
||||
}
|
||||
destRef, err = dockerarchive.ParseReference(dst) // FIXME? Add dockerarchive.NewReference
|
||||
ref, err := dockerArchiveDstReference(destImageName)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error getting Docker archive ImageReference for %q", dst)
|
||||
return err
|
||||
}
|
||||
destRef, err = dockerarchive.NewReference(output, ref)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error getting Docker archive ImageReference for %s:%v", output, ref)
|
||||
}
|
||||
default:
|
||||
return errors.Errorf("unknown format option %q", format)
|
||||
@ -1514,6 +1514,23 @@ func (i *Image) Save(ctx context.Context, source, format, output string, moreTag
|
||||
return nil
|
||||
}
|
||||
|
||||
// dockerArchiveDestReference returns a NamedTagged reference for a tagged image and nil for untagged image.
|
||||
func dockerArchiveDstReference(normalizedInput string) (reference.NamedTagged, error) {
|
||||
if normalizedInput == "" {
|
||||
return nil, nil
|
||||
}
|
||||
ref, err := reference.ParseNormalizedNamed(normalizedInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "docker-archive parsing reference %s", normalizedInput)
|
||||
}
|
||||
ref = reference.TagNameOnly(ref)
|
||||
namedTagged, isTagged := ref.(reference.NamedTagged)
|
||||
if !isTagged {
|
||||
namedTagged = nil
|
||||
}
|
||||
return namedTagged, nil
|
||||
}
|
||||
|
||||
// GetConfigBlob returns a schema2image. If the image is not a schema2, then
|
||||
// it will return an error
|
||||
func (i *Image) GetConfigBlob(ctx context.Context) (*manifest.Schema2Image, error) {
|
||||
|
Reference in New Issue
Block a user