Merge pull request #29144 from ronnielai/test1

Automatic merge from submit-queue

Update docker engine-api to dea108d3aa

#29129
pull/6/head
k8s-merge-robot 2016-07-18 20:57:35 -07:00 committed by GitHub
commit d097790b95
11 changed files with 84 additions and 41 deletions

58
Godeps/Godeps.json generated
View File

@ -225,7 +225,7 @@
}, },
{ {
"ImportPath": "github.com/codegangsta/negroni", "ImportPath": "github.com/codegangsta/negroni",
"Comment": "v0.1-62-g8d75e11", "Comment": "v0.1.0-62-g8d75e11",
"Rev": "8d75e11374a1928608c906fe745b538483e7aeb2" "Rev": "8d75e11374a1928608c906fe745b538483e7aeb2"
}, },
{ {
@ -642,68 +642,68 @@
}, },
{ {
"ImportPath": "github.com/docker/engine-api/client", "ImportPath": "github.com/docker/engine-api/client",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/client/transport", "ImportPath": "github.com/docker/engine-api/client/transport",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/client/transport/cancellable", "ImportPath": "github.com/docker/engine-api/client/transport/cancellable",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/types", "ImportPath": "github.com/docker/engine-api/types",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/types/blkiodev", "ImportPath": "github.com/docker/engine-api/types/blkiodev",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/types/container", "ImportPath": "github.com/docker/engine-api/types/container",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/types/filters", "ImportPath": "github.com/docker/engine-api/types/filters",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/types/network", "ImportPath": "github.com/docker/engine-api/types/network",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/types/reference", "ImportPath": "github.com/docker/engine-api/types/reference",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/types/registry", "ImportPath": "github.com/docker/engine-api/types/registry",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/types/strslice", "ImportPath": "github.com/docker/engine-api/types/strslice",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/types/time", "ImportPath": "github.com/docker/engine-api/types/time",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/engine-api/types/versions", "ImportPath": "github.com/docker/engine-api/types/versions",
"Comment": "v0.3.1-62-g3d72d39", "Comment": "v0.3.1-78-gdea108d",
"Rev": "3d72d392d07bece8d7d7b2a3b6b2e57c2df376a2" "Rev": "dea108d3aa0c67d7162a3fd8aa65f38a430019fd"
}, },
{ {
"ImportPath": "github.com/docker/go-connections/nat", "ImportPath": "github.com/docker/go-connections/nat",
@ -2123,18 +2123,22 @@
}, },
{ {
"ImportPath": "gopkg.in/gcfg.v1", "ImportPath": "gopkg.in/gcfg.v1",
"Comment": "v1.0.0",
"Rev": "083575c3955c85df16fe9590cceab64d03f5eb6e" "Rev": "083575c3955c85df16fe9590cceab64d03f5eb6e"
}, },
{ {
"ImportPath": "gopkg.in/gcfg.v1/scanner", "ImportPath": "gopkg.in/gcfg.v1/scanner",
"Comment": "v1.0.0",
"Rev": "083575c3955c85df16fe9590cceab64d03f5eb6e" "Rev": "083575c3955c85df16fe9590cceab64d03f5eb6e"
}, },
{ {
"ImportPath": "gopkg.in/gcfg.v1/token", "ImportPath": "gopkg.in/gcfg.v1/token",
"Comment": "v1.0.0",
"Rev": "083575c3955c85df16fe9590cceab64d03f5eb6e" "Rev": "083575c3955c85df16fe9590cceab64d03f5eb6e"
}, },
{ {
"ImportPath": "gopkg.in/gcfg.v1/types", "ImportPath": "gopkg.in/gcfg.v1/types",
"Comment": "v1.0.0",
"Rev": "083575c3955c85df16fe9590cceab64d03f5eb6e" "Rev": "083575c3955c85df16fe9590cceab64d03f5eb6e"
}, },
{ {

View File

@ -35,6 +35,10 @@ func (cli *Client) ContainerLogs(ctx context.Context, container string, options
query.Set("timestamps", "1") query.Set("timestamps", "1")
} }
if options.Details {
query.Set("details", "1")
}
if options.Follow { if options.Follow {
query.Set("follow", "1") query.Set("follow", "1")
} }

View File

@ -10,8 +10,8 @@ import (
) )
// ImageLoad loads an image in the docker host from the client host. // ImageLoad loads an image in the docker host from the client host.
// It's up to the caller to close the io.ReadCloser returned by // It's up to the caller to close the io.ReadCloser in the
// this function. // ImageLoadResponse returned by this function.
func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error) { func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
v := url.Values{} v := url.Values{}
v.Set("quiet", "0") v.Set("quiet", "0")

View File

@ -27,12 +27,12 @@ func (cli *Client) ImagePull(ctx context.Context, ref string, options types.Imag
query := url.Values{} query := url.Values{}
query.Set("fromImage", repository) query.Set("fromImage", repository)
if tag != "" { if tag != "" && !options.All {
query.Set("tag", tag) query.Set("tag", tag)
} }
resp, err := cli.tryImageCreate(ctx, query, options.RegistryAuth) resp, err := cli.tryImageCreate(ctx, query, options.RegistryAuth)
if resp.statusCode == http.StatusUnauthorized { if resp.statusCode == http.StatusUnauthorized && options.PrivilegeFunc != nil {
newAuthHeader, privilegeErr := options.PrivilegeFunc() newAuthHeader, privilegeErr := options.PrivilegeFunc()
if privilegeErr != nil { if privilegeErr != nil {
return nil, privilegeErr return nil, privilegeErr

View File

@ -10,7 +10,6 @@ import (
distreference "github.com/docker/distribution/reference" distreference "github.com/docker/distribution/reference"
"github.com/docker/engine-api/types" "github.com/docker/engine-api/types"
"github.com/docker/engine-api/types/reference"
) )
// ImagePush requests the docker host to push an image to a remote registry. // ImagePush requests the docker host to push an image to a remote registry.
@ -27,7 +26,10 @@ func (cli *Client) ImagePush(ctx context.Context, ref string, options types.Imag
return nil, errors.New("cannot push a digest reference") return nil, errors.New("cannot push a digest reference")
} }
tag := reference.GetTagFromNamedRef(distributionRef) var tag = ""
if nameTaggedRef, isNamedTagged := distributionRef.(distreference.NamedTagged); isNamedTagged {
tag = nameTaggedRef.Tag()
}
query := url.Values{} query := url.Values{}
query.Set("tag", tag) query.Set("tag", tag)

View File

@ -6,6 +6,7 @@ import (
"net/url" "net/url"
"github.com/docker/engine-api/types" "github.com/docker/engine-api/types"
"github.com/docker/engine-api/types/filters"
"github.com/docker/engine-api/types/registry" "github.com/docker/engine-api/types/registry"
"golang.org/x/net/context" "golang.org/x/net/context"
) )
@ -17,6 +18,14 @@ func (cli *Client) ImageSearch(ctx context.Context, term string, options types.I
query := url.Values{} query := url.Values{}
query.Set("term", term) query.Set("term", term)
if options.Filters.Len() > 0 {
filterJSON, err := filters.ToParam(options.Filters)
if err != nil {
return results, err
}
query.Set("filters", filterJSON)
}
resp, err := cli.tryImageSearch(ctx, query, options.RegistryAuth) resp, err := cli.tryImageSearch(ctx, query, options.RegistryAuth)
if resp.statusCode == http.StatusUnauthorized { if resp.statusCode == http.StatusUnauthorized {
newAuthHeader, privilegeErr := options.PrivilegeFunc() newAuthHeader, privilegeErr := options.PrivilegeFunc()

View File

@ -57,6 +57,7 @@ type ContainerLogsOptions struct {
Timestamps bool Timestamps bool
Follow bool Follow bool
Tail string Tail string
Details bool
} }
// ContainerRemoveOptions holds parameters to remove containers. // ContainerRemoveOptions holds parameters to remove containers.
@ -172,12 +173,14 @@ type ImageListOptions struct {
// ImageLoadResponse returns information to the client about a load process. // ImageLoadResponse returns information to the client about a load process.
type ImageLoadResponse struct { type ImageLoadResponse struct {
// Body must be closed to avoid a resource leak
Body io.ReadCloser Body io.ReadCloser
JSON bool JSON bool
} }
// ImagePullOptions holds information to pull images. // ImagePullOptions holds information to pull images.
type ImagePullOptions struct { type ImagePullOptions struct {
All bool
RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry
PrivilegeFunc RequestPrivilegeFunc PrivilegeFunc RequestPrivilegeFunc
} }
@ -203,6 +206,7 @@ type ImageRemoveOptions struct {
type ImageSearchOptions struct { type ImageSearchOptions struct {
RegistryAuth string RegistryAuth string
PrivilegeFunc RequestPrivilegeFunc PrivilegeFunc RequestPrivilegeFunc
Filters filters.Args
} }
// ImageTagOptions holds parameters to tag an image // ImageTagOptions holds parameters to tag an image

View File

@ -136,30 +136,49 @@ func (n UTSMode) Valid() bool {
return true return true
} }
// PidMode represents the pid stack of the container. // PidMode represents the pid namespace of the container.
type PidMode string type PidMode string
// IsPrivate indicates whether the container uses its private pid stack. // IsPrivate indicates whether the container uses its own new pid namespace.
func (n PidMode) IsPrivate() bool { func (n PidMode) IsPrivate() bool {
return !(n.IsHost()) return !(n.IsHost() || n.IsContainer())
} }
// IsHost indicates whether the container uses the host's pid stack. // IsHost indicates whether the container uses the host's pid namespace.
func (n PidMode) IsHost() bool { func (n PidMode) IsHost() bool {
return n == "host" return n == "host"
} }
// Valid indicates whether the pid stack is valid. // IsContainer indicates whether the container uses a container's pid namespace.
func (n PidMode) IsContainer() bool {
parts := strings.SplitN(string(n), ":", 2)
return len(parts) > 1 && parts[0] == "container"
}
// Valid indicates whether the pid namespace is valid.
func (n PidMode) Valid() bool { func (n PidMode) Valid() bool {
parts := strings.Split(string(n), ":") parts := strings.Split(string(n), ":")
switch mode := parts[0]; mode { switch mode := parts[0]; mode {
case "", "host": case "", "host":
case "container":
if len(parts) != 2 || parts[1] == "" {
return false
}
default: default:
return false return false
} }
return true return true
} }
// Container returns the name of the container whose pid namespace is going to be used.
func (n PidMode) Container() string {
parts := strings.SplitN(string(n), ":", 2)
if len(parts) > 1 {
return parts[1]
}
return ""
}
// DeviceMapping represents the device mapping between the host and the container. // DeviceMapping represents the device mapping between the host and the container.
type DeviceMapping struct { type DeviceMapping struct {
PathOnHost string PathOnHost string

View File

@ -27,6 +27,8 @@ func GetTagFromNamedRef(ref distreference.Named) string {
tag = x.Digest().String() tag = x.Digest().String()
case distreference.NamedTagged: case distreference.NamedTagged:
tag = x.Tag() tag = x.Tag()
default:
tag = "latest"
} }
return tag return tag
} }

View File

@ -78,12 +78,10 @@ type IndexInfo struct {
type SearchResult struct { type SearchResult struct {
// StarCount indicates the number of stars this repository has // StarCount indicates the number of stars this repository has
StarCount int `json:"star_count"` StarCount int `json:"star_count"`
// IsOfficial indicates whether the result is an official repository or not // IsOfficial is true if the result is from an official repository.
IsOfficial bool `json:"is_official"` IsOfficial bool `json:"is_official"`
// Name is the name of the repository // Name is the name of the repository
Name string `json:"name"` Name string `json:"name"`
// IsTrusted indicates whether the result is trusted
IsTrusted bool `json:"is_trusted"`
// IsAutomated indicates whether the result is automated // IsAutomated indicates whether the result is automated
IsAutomated bool `json:"is_automated"` IsAutomated bool `json:"is_automated"`
// Description is a textual description of the repository // Description is a textual description of the repository

View File

@ -395,6 +395,7 @@ type Volume struct {
Mountpoint string // Mountpoint is the location on disk of the volume Mountpoint string // Mountpoint is the location on disk of the volume
Status map[string]interface{} `json:",omitempty"` // Status provides low-level status information about the volume Status map[string]interface{} `json:",omitempty"` // Status provides low-level status information about the volume
Labels map[string]string // Labels is metadata specific to the volume Labels map[string]string // Labels is metadata specific to the volume
Scope string // Scope describes the level at which the volume exists (e.g. `global` for cluster-wide or `local` for machine level)
} }
// VolumesListResponse contains the response for the remote API: // VolumesListResponse contains the response for the remote API: