From 7de9f6ee62b6334bf2fcbc5c77d422446eeac628 Mon Sep 17 00:00:00 2001 From: Nishant Totla Date: Wed, 30 Mar 2016 09:46:38 -0700 Subject: [PATCH] Moving over images to use engine-api Signed-off-by: Nishant Totla --- api/handlers.go | 10 +++++----- api/sorter.go | 4 ++-- cluster/engine.go | 5 +++-- cluster/image.go | 9 +++++---- scheduler/filter/affinity.go | 2 +- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/api/handlers.go b/api/handlers.go index 68570110e8..d08fb5453a 100644 --- a/api/handlers.go +++ b/api/handlers.go @@ -185,7 +185,7 @@ func getImagesJSON(c *context, w http.ResponseWriter, r *http.Request) { accepteds := filters.Get("node") // this struct helps grouping images // but still keeps their Engine infos as an array. - groupImages := make(map[string]dockerclient.Image) + groupImages := make(map[string]apitypes.Image) opts := cluster.ImageFilterOptions{ All: boolValue(r, "all"), NameFilter: r.FormValue("filter"), @@ -206,16 +206,16 @@ func getImagesJSON(c *context, w http.ResponseWriter, r *http.Request) { } // grouping images by Id, and concat their RepoTags - if entry, existed := groupImages[image.Id]; existed { + if entry, existed := groupImages[image.ID]; existed { entry.RepoTags = append(entry.RepoTags, image.RepoTags...) entry.RepoDigests = append(entry.RepoDigests, image.RepoDigests...) - groupImages[image.Id] = entry + groupImages[image.ID] = entry } else { - groupImages[image.Id] = image.Image + groupImages[image.ID] = image.Image } } - images := []dockerclient.Image{} + images := []apitypes.Image{} for _, image := range groupImages { // de-duplicate RepoTags diff --git a/api/sorter.go b/api/sorter.go index fbc99cee2e..97f57cd88d 100644 --- a/api/sorter.go +++ b/api/sorter.go @@ -1,8 +1,8 @@ package api import ( + "github.com/docker/engine-api/types" "github.com/docker/swarm/cluster" - "github.com/samalba/dockerclient" ) // ContainerSorter implements the Sort interface to sort Docker containers. @@ -27,7 +27,7 @@ func (s ContainerSorter) Less(i, j int) bool { // ImageSorter implements the Sort interface to sort Docker Images. // It is not guaranteed to be a stable sort. -type ImageSorter []dockerclient.Image +type ImageSorter []types.Image // Len returns the number of images to be sorted. func (s ImageSorter) Len() int { diff --git a/cluster/engine.go b/cluster/engine.go index 64c9a8e34d..f5db8ec6ca 100644 --- a/cluster/engine.go +++ b/cluster/engine.go @@ -536,7 +536,8 @@ func (e *Engine) RemoveVolume(name string) error { // RefreshImages refreshes the list of images on the engine. func (e *Engine) RefreshImages() error { - images, err := e.client.ListImages(true) + imgLstOpts := types.ImageListOptions{All: true} + images, err := e.apiClient.ImageList(context.TODO(), imgLstOpts) e.CheckConnectionErr(err) if err != nil { return err @@ -544,7 +545,7 @@ func (e *Engine) RefreshImages() error { e.Lock() e.images = nil for _, image := range images { - e.images = append(e.images, &Image{Image: *image, Engine: e}) + e.images = append(e.images, &Image{Image: image, Engine: e}) } e.Unlock() return nil diff --git a/cluster/image.go b/cluster/image.go index 9dab589db6..8bd73c252e 100644 --- a/cluster/image.go +++ b/cluster/image.go @@ -3,13 +3,13 @@ package cluster import ( "strings" + "github.com/docker/engine-api/types" dockerfilters "github.com/docker/engine-api/types/filters" - "github.com/samalba/dockerclient" ) // Image is exported type Image struct { - dockerclient.Image + types.Image Engine *Engine } @@ -39,12 +39,12 @@ func (image *Image) Match(IDOrName string, matchTag bool) bool { size := len(IDOrName) // TODO: prefix match can cause false positives with image names - if image.Id == IDOrName || (size > 2 && strings.HasPrefix(image.Id, IDOrName)) { + if image.ID == IDOrName || (size > 2 && strings.HasPrefix(image.ID, IDOrName)) { return true } // trim sha256: and retry - if parts := strings.SplitN(image.Id, ":", 2); len(parts) == 2 { + if parts := strings.SplitN(image.ID, ":", 2); len(parts) == 2 { if parts[1] == IDOrName || (size > 2 && strings.HasPrefix(parts[1], IDOrName)) { return true } @@ -80,6 +80,7 @@ func (image *Image) Match(IDOrName string, matchTag bool) bool { // ImageFilterOptions is the set of filtering options supported by // Images.Filter() +// FIXMEENGINEAPI: should either embed or be replaced by types.ImageListOptions type ImageFilterOptions struct { All bool NameFilter string diff --git a/scheduler/filter/affinity.go b/scheduler/filter/affinity.go index 80bb7ea8aa..6904b4d210 100644 --- a/scheduler/filter/affinity.go +++ b/scheduler/filter/affinity.go @@ -47,7 +47,7 @@ func (f *AffinityFilter) Filter(config *cluster.ContainerConfig, nodes []*node.N case "image": images := []string{} for _, image := range node.Images { - images = append(images, image.Id) + images = append(images, image.ID) images = append(images, image.RepoTags...) for _, tag := range image.RepoTags { repo, _ := cluster.ParseRepositoryTag(tag)