diff --git a/api/handlers.go b/api/handlers.go index 54dfeb4d0d..b6cb6c0505 100644 --- a/api/handlers.go +++ b/api/handlers.go @@ -18,6 +18,7 @@ import ( "github.com/docker/docker/pkg/parsers/kernel" versionpkg "github.com/docker/docker/pkg/version" apitypes "github.com/docker/engine-api/types" + containertypes "github.com/docker/engine-api/types/container" dockerfilters "github.com/docker/engine-api/types/filters" "github.com/docker/swarm/cluster" "github.com/docker/swarm/experimental" @@ -1220,25 +1221,26 @@ func postBuild(c *context, w http.ResponseWriter, r *http.Request) { return } - buildImage := &dockerclient.BuildImage{ - DockerfileName: r.Form.Get("dockerfile"), - RepoName: r.Form.Get("t"), - RemoteURL: r.Form.Get("remote"), + buildImage := &apitypes.ImageBuildOptions{ + Dockerfile: r.Form.Get("dockerfile"), + Tags: r.Form["t"], + RemoteContext: r.Form.Get("remote"), NoCache: boolValue(r, "nocache"), - Pull: boolValue(r, "pull"), + PullParent: boolValue(r, "pull"), Remove: boolValue(r, "rm"), ForceRemove: boolValue(r, "forcerm"), SuppressOutput: boolValue(r, "q"), + Isolation: containertypes.Isolation(r.Form.Get("isolation")), Memory: int64ValueOrZero(r, "memory"), MemorySwap: int64ValueOrZero(r, "memswap"), - CpuShares: int64ValueOrZero(r, "cpushares"), - CpuPeriod: int64ValueOrZero(r, "cpuperiod"), - CpuQuota: int64ValueOrZero(r, "cpuquota"), - CpuSetCpus: r.Form.Get("cpusetcpus"), - CpuSetMems: r.Form.Get("cpusetmems"), + CPUShares: int64ValueOrZero(r, "cpushares"), + CPUPeriod: int64ValueOrZero(r, "cpuperiod"), + CPUQuota: int64ValueOrZero(r, "cpuquota"), + CPUSetCPUs: r.Form.Get("cpusetcpus"), + CPUSetMems: r.Form.Get("cpusetmems"), CgroupParent: r.Form.Get("cgroupparent"), + ShmSize: int64ValueOrZero(r, "shmsize"), Context: r.Body, - BuildArgs: make(map[string]string), } buildArgsJSON := r.Form.Get("buildargs") @@ -1246,11 +1248,21 @@ func postBuild(c *context, w http.ResponseWriter, r *http.Request) { json.Unmarshal([]byte(buildArgsJSON), &buildImage.BuildArgs) } - authEncoded := r.Header.Get("X-Registry-Auth") + ulimitsJSON := r.Form.Get("ulimits") + if ulimitsJSON != "" { + json.Unmarshal([]byte(ulimitsJSON), &buildImage.Ulimits) + } + + labelsJSON := r.Form.Get("labels") + if labelsJSON != "" { + json.Unmarshal([]byte(labelsJSON), &buildImage.Labels) + } + + authEncoded := r.Header.Get("X-Registry-Config") if authEncoded != "" { - buf, err := base64.URLEncoding.DecodeString(r.Header.Get("X-Registry-Auth")) + buf, err := base64.URLEncoding.DecodeString(r.Header.Get("X-Registry-Config")) if err == nil { - json.Unmarshal(buf, &buildImage.Config) + json.Unmarshal(buf, &buildImage.AuthConfigs) } } diff --git a/cluster/cluster.go b/cluster/cluster.go index 1f1b1896ff..bc50a60774 100644 --- a/cluster/cluster.go +++ b/cluster/cluster.go @@ -3,6 +3,7 @@ package cluster import ( "io" + "github.com/docker/engine-api/types" "github.com/samalba/dockerclient" ) @@ -94,7 +95,7 @@ type Cluster interface { RenameContainer(container *Container, newName string) error // BuildImage build an image - BuildImage(*dockerclient.BuildImage, io.Writer) error + BuildImage(*types.ImageBuildOptions, io.Writer) error // TagImage tag an image TagImage(IDOrName string, repo string, tag string, force bool) error diff --git a/cluster/engine.go b/cluster/engine.go index ca85cbf238..a58c232ff1 100644 --- a/cluster/engine.go +++ b/cluster/engine.go @@ -18,6 +18,7 @@ import ( log "github.com/Sirupsen/logrus" "github.com/docker/docker/pkg/version" engineapi "github.com/docker/engine-api/client" + "github.com/docker/engine-api/types" engineapinop "github.com/docker/swarm/api/nopclient" "github.com/samalba/dockerclient" "github.com/samalba/dockerclient/nopclient" @@ -1128,10 +1129,13 @@ func (e *Engine) RenameContainer(container *Container, newName string) error { } // BuildImage builds an image -func (e *Engine) BuildImage(buildImage *dockerclient.BuildImage) (io.ReadCloser, error) { - reader, err := e.client.BuildImage(buildImage) +func (e *Engine) BuildImage(buildImage *types.ImageBuildOptions) (io.ReadCloser, error) { + resp, err := e.apiClient.ImageBuild(context.TODO(), *buildImage) e.CheckConnectionErr(err) - return reader, err + if err != nil { + return nil, err + } + return resp.Body, nil } // TagImage tags an image diff --git a/cluster/mesos/cluster.go b/cluster/mesos/cluster.go index ec96890acd..3a7b76203d 100644 --- a/cluster/mesos/cluster.go +++ b/cluster/mesos/cluster.go @@ -14,6 +14,7 @@ import ( "time" log "github.com/Sirupsen/logrus" + "github.com/docker/engine-api/types" "github.com/docker/swarm/cluster" "github.com/docker/swarm/cluster/mesos/task" "github.com/docker/swarm/scheduler" @@ -639,12 +640,12 @@ func (c *Cluster) RANDOMENGINE() (*cluster.Engine, error) { } // BuildImage builds an image -func (c *Cluster) BuildImage(buildImage *dockerclient.BuildImage, out io.Writer) error { +func (c *Cluster) BuildImage(buildImage *types.ImageBuildOptions, out io.Writer) error { c.scheduler.Lock() // get an engine config := &cluster.ContainerConfig{dockerclient.ContainerConfig{ - CpuShares: buildImage.CpuShares, + CpuShares: buildImage.CPUShares, Memory: buildImage.Memory, }} nodes, err := c.scheduler.SelectNodesForContainer(c.listNodes(), config) diff --git a/cluster/swarm/cluster.go b/cluster/swarm/cluster.go index 1e6789672f..4ca8d60172 100644 --- a/cluster/swarm/cluster.go +++ b/cluster/swarm/cluster.go @@ -14,6 +14,7 @@ import ( log "github.com/Sirupsen/logrus" "github.com/docker/docker/pkg/discovery" "github.com/docker/docker/pkg/stringid" + "github.com/docker/engine-api/types" "github.com/docker/go-units" "github.com/docker/swarm/cluster" "github.com/docker/swarm/scheduler" @@ -895,12 +896,12 @@ func (c *Cluster) RenameContainer(container *cluster.Container, newName string) } // BuildImage build an image -func (c *Cluster) BuildImage(buildImage *dockerclient.BuildImage, out io.Writer) error { +func (c *Cluster) BuildImage(buildImage *types.ImageBuildOptions, out io.Writer) error { c.scheduler.Lock() // get an engine config := cluster.BuildContainerConfig(dockerclient.ContainerConfig{ - CpuShares: buildImage.CpuShares, + CpuShares: buildImage.CPUShares, Memory: buildImage.Memory, Env: convertMapToKVStrings(buildImage.BuildArgs), })