Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 39 additions & 4 deletions dockerclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -539,12 +539,47 @@ func (client *DockerClient) RemoveContainer(id string, force, volumes bool) erro
return err
}

func (client *DockerClient) ListImages(all bool) ([]*Image, error) {
argAll := 0
func (client *DockerClient) ListImages(all bool, filter string, filters *ListFilter) ([]*Image, error) {
v := url.Values{}

argAll := "0"
if all {
argAll = 1
argAll = "1"
}
v.Set("all", argAll)

if filter != "" {
v.Set("filter", filter)
}

filtersData := make(map[string][]string)

if filters.Dangling {
filtersData["dangling"] = []string{"true"}
}

if len(filters.Keys) > 0 {
for _, key := range filters.Keys {
filtersData["key"] = append(filtersData["key"], key)
}
}

if len(filters.Labels) > 0 {
for _, label := range filters.Labels {
filtersData["label"] = append(filtersData["label"], label)
}
}
uri := fmt.Sprintf("/%s/images/json?all=%d", APIVersion, argAll)

if len(filtersData) > 0 {
mf, err := json.Marshal(filtersData)
if err != nil {
return nil, err
}
v.Set("filters", string(mf))
}

uri := fmt.Sprintf("/%s/images/json?%s", APIVersion, v.Encode())

data, err := client.doRequest("GET", uri, nil, nil)
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ type Client interface {
PullImage(name string, auth *AuthConfig) error
LoadImage(reader io.Reader) error
RemoveContainer(id string, force, volumes bool) error
ListImages(all bool) ([]*Image, error)
ListImages(all bool, filter string, filters *ListFilter) ([]*Image, error)
RemoveImage(name string) ([]*ImageDelete, error)
PauseContainer(name string) error
UnpauseContainer(name string) error
Expand Down
4 changes: 2 additions & 2 deletions mockclient/mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ func (client *MockClient) RemoveContainer(id string, force, volumes bool) error
return args.Error(0)
}

func (client *MockClient) ListImages(all bool) ([]*dockerclient.Image, error) {
args := client.Mock.Called(all)
func (client *MockClient) ListImages(all bool, filter string, filters *ListFilter) ([]*dockerclient.Image, error) {
args := client.Mock.Called(all, filter, filters)
return args.Get(0).([]*dockerclient.Image), args.Error(1)
}

Expand Down
6 changes: 6 additions & 0 deletions types.go
Original file line number Diff line number Diff line change
Expand Up @@ -437,3 +437,9 @@ type BuildImage struct {
CpuSetMems string
CgroupParent string
}

type ListFilter struct {
Dangling bool
Labels []string
Keys []string
}