diff --git a/daemon/images/image.go b/daemon/images/image.go index 7dda553138..79cc07c4fd 100644 --- a/daemon/images/image.go +++ b/daemon/images/image.go @@ -24,32 +24,30 @@ func (e ErrImageDoesNotExist) Error() string { // NotFound implements the NotFound interface func (e ErrImageDoesNotExist) NotFound() {} -// GetImageIDAndOS returns an image ID and operating system corresponding to the image referred to by -// refOrID. -// called from list.go foldFilter() -func (i ImageService) GetImageIDAndOS(refOrID string) (image.ID, string, error) { +// GetImage returns an image corresponding to the image referred to by refOrID. +func (i *ImageService) GetImage(refOrID string) (*image.Image, error) { ref, err := reference.ParseAnyReference(refOrID) if err != nil { - return "", "", errdefs.InvalidParameter(err) + return nil, errdefs.InvalidParameter(err) } namedRef, ok := ref.(reference.Named) if !ok { digested, ok := ref.(reference.Digested) if !ok { - return "", "", ErrImageDoesNotExist{ref} + return nil, ErrImageDoesNotExist{ref} } id := image.IDFromDigest(digested.Digest()) if img, err := i.imageStore.Get(id); err == nil { - return id, img.OperatingSystem(), nil + return img, nil } - return "", "", ErrImageDoesNotExist{ref} + return nil, ErrImageDoesNotExist{ref} } if digest, err := i.referenceStore.Get(namedRef); err == nil { // Search the image stores to get the operating system, defaulting to host OS. id := image.IDFromDigest(digest) if img, err := i.imageStore.Get(id); err == nil { - return id, img.OperatingSystem(), nil + return img, nil } } @@ -57,19 +55,10 @@ func (i ImageService) GetImageIDAndOS(refOrID string) (image.ID, string, error) if id, err := i.imageStore.Search(refOrID); err == nil { img, err := i.imageStore.Get(id) if err != nil { - return "", "", ErrImageDoesNotExist{ref} + return nil, ErrImageDoesNotExist{ref} } - return id, img.OperatingSystem(), nil + return img, nil } - return "", "", ErrImageDoesNotExist{ref} -} - -// GetImage returns an image corresponding to the image referred to by refOrID. -func (i *ImageService) GetImage(refOrID string) (*image.Image, error) { - imgID, _, err := i.GetImageIDAndOS(refOrID) - if err != nil { - return nil, err - } - return i.imageStore.Get(imgID) + return nil, ErrImageDoesNotExist{ref} } diff --git a/daemon/images/image_delete.go b/daemon/images/image_delete.go index 60f60afaa7..60896e487a 100644 --- a/daemon/images/image_delete.go +++ b/daemon/images/image_delete.go @@ -64,14 +64,15 @@ func (i *ImageService) ImageDelete(imageRef string, force, prune bool) ([]types. start := time.Now() records := []types.ImageDeleteResponseItem{} - imgID, operatingSystem, err := i.GetImageIDAndOS(imageRef) + img, err := i.GetImage(imageRef) if err != nil { return nil, err } - if !system.IsOSSupported(operatingSystem) { + if !system.IsOSSupported(img.OperatingSystem()) { return nil, errors.Errorf("unable to delete image: %q", system.ErrNotSupportedOperatingSystem) } + imgID := img.ID() repoRefs := i.referenceStore.References(imgID.Digest()) using := func(c *container.Container) bool { diff --git a/daemon/images/image_tag.go b/daemon/images/image_tag.go index 6456ff81f9..4693611c3a 100644 --- a/daemon/images/image_tag.go +++ b/daemon/images/image_tag.go @@ -8,7 +8,7 @@ import ( // TagImage creates the tag specified by newTag, pointing to the image named // imageName (alternatively, imageName can also be an image ID). func (i *ImageService) TagImage(imageName, repository, tag string) (string, error) { - imageID, _, err := i.GetImageIDAndOS(imageName) + img, err := i.GetImage(imageName) if err != nil { return "", err } @@ -23,7 +23,7 @@ func (i *ImageService) TagImage(imageName, repository, tag string) (string, erro } } - err = i.TagImageWithReference(imageID, newTag) + err = i.TagImageWithReference(img.ID(), newTag) return reference.FamiliarString(newTag), err } diff --git a/daemon/list.go b/daemon/list.go index ddc6fe70be..84cacc344a 100644 --- a/daemon/list.go +++ b/daemon/list.go @@ -324,17 +324,17 @@ func (daemon *Daemon) foldFilter(view container.View, config *types.ContainerLis if psFilters.Contains("ancestor") { ancestorFilter = true psFilters.WalkValues("ancestor", func(ancestor string) error { - id, _, err := daemon.imageService.GetImageIDAndOS(ancestor) + img, err := daemon.imageService.GetImage(ancestor) if err != nil { logrus.Warnf("Error while looking up for image %v", ancestor) return nil } - if imagesFilter[id] { + if imagesFilter[img.ID()] { // Already seen this ancestor, skip it return nil } // Then walk down the graph and put the imageIds in imagesFilter - populateImageFilterByParents(imagesFilter, id, daemon.imageService.Children) + populateImageFilterByParents(imagesFilter, img.ID(), daemon.imageService.Children) return nil }) } @@ -592,11 +592,11 @@ func (daemon *Daemon) refreshImage(s *container.Snapshot, ctx *listContext) (*ty c := s.Container image := s.Image // keep the original ref if still valid (hasn't changed) if image != s.ImageID { - id, _, err := daemon.imageService.GetImageIDAndOS(image) + img, err := daemon.imageService.GetImage(image) if _, isDNE := err.(images.ErrImageDoesNotExist); err != nil && !isDNE { return nil, err } - if err != nil || id.String() != s.ImageID { + if err != nil || img.ImageID() != s.ImageID { // ref changed, we need to use original ID image = s.ImageID }