Changing relevant function calls for updated engine-api

Signed-off-by: Nishant Totla <nishanttotla@gmail.com>
This commit is contained in:
Nishant Totla 2016-05-24 16:57:44 -07:00
parent 8fd494ba58
commit 82f1bfe0ec
No known key found for this signature in database
GPG Key ID: 7EA5781C9B3D0C19
5 changed files with 65 additions and 66 deletions

View File

@ -620,7 +620,7 @@ func deleteContainers(c *context, w http.ResponseWriter, r *http.Request) {
// POST /networks/create // POST /networks/create
func postNetworksCreate(c *context, w http.ResponseWriter, r *http.Request) { func postNetworksCreate(c *context, w http.ResponseWriter, r *http.Request) {
var request apitypes.NetworkCreate var request apitypes.NetworkCreateRequest
if err := json.NewDecoder(r.Body).Decode(&request); err != nil { if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
httpError(w, err.Error(), http.StatusBadRequest) httpError(w, err.Error(), http.StatusBadRequest)
@ -631,7 +631,7 @@ func postNetworksCreate(c *context, w http.ResponseWriter, r *http.Request) {
request.Driver = "overlay" request.Driver = "overlay"
} }
response, err := c.cluster.CreateNetwork(&request) response, err := c.cluster.CreateNetwork(request.Name, &request.NetworkCreate)
if err != nil { if err != nil {
httpError(w, err.Error(), http.StatusInternalServerError) httpError(w, err.Error(), http.StatusInternalServerError)
return return
@ -1277,7 +1277,6 @@ func postBuild(c *context, w http.ResponseWriter, r *http.Request) {
CPUSetMems: r.Form.Get("cpusetmems"), CPUSetMems: r.Form.Get("cpusetmems"),
CgroupParent: r.Form.Get("cgroupparent"), CgroupParent: r.Form.Get("cgroupparent"),
ShmSize: int64ValueOrZero(r, "shmsize"), ShmSize: int64ValueOrZero(r, "shmsize"),
Context: r.Body,
} }
buildArgsJSON := r.Form.Get("buildargs") buildArgsJSON := r.Form.Get("buildargs")
@ -1306,7 +1305,7 @@ func postBuild(c *context, w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
wf := NewWriteFlusher(w) wf := NewWriteFlusher(w)
err := c.cluster.BuildImage(buildImage, wf) err := c.cluster.BuildImage(r.Body, buildImage, wf)
if err != nil { if err != nil {
httpError(w, err.Error(), http.StatusInternalServerError) httpError(w, err.Error(), http.StatusInternalServerError)
} }

View File

@ -39,7 +39,7 @@ type Cluster interface {
Networks() Networks Networks() Networks
// Create a network // Create a network
CreateNetwork(request *types.NetworkCreate) (*types.NetworkCreateResponse, error) CreateNetwork(name string, request *types.NetworkCreate) (*types.NetworkCreateResponse, error)
// Remove a network from the cluster // Remove a network from the cluster
RemoveNetwork(network *Network) error RemoveNetwork(network *Network) error
@ -95,7 +95,7 @@ type Cluster interface {
RenameContainer(container *Container, newName string) error RenameContainer(container *Container, newName string) error
// Build an image // Build an image
BuildImage(*types.ImageBuildOptions, io.Writer) error BuildImage(io.Reader, *types.ImageBuildOptions, io.Writer) error
// Tag an image // Tag an image
TagImage(IDOrName string, repo string, tag string, force bool) error TagImage(IDOrName string, repo string, tag string, force bool) error

View File

@ -17,7 +17,6 @@ import (
"golang.org/x/net/context" "golang.org/x/net/context"
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
"github.com/docker/distribution/reference"
"github.com/docker/docker/pkg/version" "github.com/docker/docker/pkg/version"
engineapi "github.com/docker/engine-api/client" engineapi "github.com/docker/engine-api/client"
"github.com/docker/engine-api/types" "github.com/docker/engine-api/types"
@ -523,8 +522,8 @@ func (e *Engine) updateSpecs() error {
// RemoveImage deletes an image from the engine. // RemoveImage deletes an image from the engine.
func (e *Engine) RemoveImage(name string, force bool) ([]types.ImageDelete, error) { func (e *Engine) RemoveImage(name string, force bool) ([]types.ImageDelete, error) {
rmOpts := types.ImageRemoveOptions{name, force, true} rmOpts := types.ImageRemoveOptions{force, true}
dels, err := e.apiClient.ImageRemove(context.Background(), rmOpts) dels, err := e.apiClient.ImageRemove(context.Background(), name, rmOpts)
e.CheckConnectionErr(err) e.CheckConnectionErr(err)
e.RefreshImages() e.RefreshImages()
return dels, err return dels, err
@ -916,11 +915,10 @@ func (e *Engine) Create(config *ContainerConfig, name string, pullImage bool, au
// RemoveContainer removes a container from the engine. // RemoveContainer removes a container from the engine.
func (e *Engine) RemoveContainer(container *Container, force, volumes bool) error { func (e *Engine) RemoveContainer(container *Container, force, volumes bool) error {
opts := types.ContainerRemoveOptions{ opts := types.ContainerRemoveOptions{
ContainerID: container.ID,
Force: force, Force: force,
RemoveVolumes: volumes, RemoveVolumes: volumes,
} }
err := e.apiClient.ContainerRemove(context.Background(), opts) err := e.apiClient.ContainerRemove(context.Background(), container.ID, opts)
e.CheckConnectionErr(err) e.CheckConnectionErr(err)
if err != nil { if err != nil {
return err return err
@ -936,8 +934,8 @@ func (e *Engine) RemoveContainer(container *Container, force, volumes bool) erro
} }
// CreateNetwork creates a network in the engine // CreateNetwork creates a network in the engine
func (e *Engine) CreateNetwork(request *types.NetworkCreate) (*types.NetworkCreateResponse, error) { func (e *Engine) CreateNetwork(name string, request *types.NetworkCreate) (*types.NetworkCreateResponse, error) {
response, err := e.apiClient.NetworkCreate(context.Background(), *request) response, err := e.apiClient.NetworkCreate(context.Background(), name, *request)
e.CheckConnectionErr(err) e.CheckConnectionErr(err)
e.RefreshNetworks() e.RefreshNetworks()
@ -959,36 +957,16 @@ func (e *Engine) CreateVolume(request *types.VolumeCreateRequest) (*Volume, erro
} }
// FIXME: This will become unnecessary after docker/engine-api#162 is merged
func buildImagePullOptions(image string) (types.ImagePullOptions, error) {
distributionRef, err := reference.ParseNamed(image)
if err != nil {
return types.ImagePullOptions{}, err
}
name := distributionRef.Name()
tag := "latest"
switch x := distributionRef.(type) {
case reference.Canonical:
tag = x.Digest().String()
case reference.NamedTagged:
tag = x.Tag()
}
return types.ImagePullOptions{
ImageID: name,
Tag: tag,
}, nil
}
// Pull an image on the engine // Pull an image on the engine
func (e *Engine) Pull(image string, authConfig *types.AuthConfig) error { func (e *Engine) Pull(image string, authConfig *types.AuthConfig) error {
pullOpts, err := buildImagePullOptions(image) // TODO(nishanttotla): RegistryAuth probably needs fixing
if err != nil { pullOpts := types.ImagePullOptions{
return err All: false,
RegistryAuth: authConfig.Auth,
PrivilegeFunc: nil,
} }
pullResponseBody, err := e.apiClient.ImagePull(context.Background(), pullOpts, nil) // image is a ref here
pullResponseBody, err := e.apiClient.ImagePull(context.Background(), image, pullOpts)
e.CheckConnectionErr(err) e.CheckConnectionErr(err)
if err != nil { if err != nil {
return err return err
@ -1052,13 +1030,25 @@ func (e *Engine) Load(reader io.Reader) error {
// Import image // Import image
func (e *Engine) Import(source string, repository string, tag string, imageReader io.Reader) error { func (e *Engine) Import(source string, repository string, tag string, imageReader io.Reader) error {
opts := types.ImageImportOptions{ importSrc := types.ImageImportSource{
SourceName: source, Source: imageReader,
RepositoryName: repository, SourceName: source,
Tag: tag,
Source: imageReader,
} }
_, err := e.apiClient.ImageImport(context.Background(), opts) opts := types.ImageImportOptions{
Tag: tag,
}
// TODO(nishanttotla): There might be a better way to pass a ref string than construct it here
// generate ref string
ref := repository
if tag != "" {
if strings.Contains(tag, ":") {
ref += "@" + tag
} else {
ref += ":" + tag
}
}
_, err := e.apiClient.ImageImport(context.Background(), importSrc, ref, opts)
e.CheckConnectionErr(err) e.CheckConnectionErr(err)
if err != nil { if err != nil {
return err return err
@ -1237,7 +1227,8 @@ func (e *Engine) StartContainer(id string, hostConfig *dockerclient.HostConfig)
if hostConfig != nil { if hostConfig != nil {
err = e.client.StartContainer(id, hostConfig) err = e.client.StartContainer(id, hostConfig)
} else { } else {
err = e.apiClient.ContainerStart(context.Background(), id) // TODO(nishanttotla): Figure out what the checkpoint id (second string argument) should be
err = e.apiClient.ContainerStart(context.Background(), id, "")
} }
e.CheckConnectionErr(err) e.CheckConnectionErr(err)
if err != nil { if err != nil {
@ -1264,8 +1255,9 @@ func (e *Engine) RenameContainer(container *Container, newName string) error {
} }
// BuildImage builds an image // BuildImage builds an image
func (e *Engine) BuildImage(buildImage *types.ImageBuildOptions) (io.ReadCloser, error) { func (e *Engine) BuildImage(buildContext io.Reader, buildImage *types.ImageBuildOptions) (io.ReadCloser, error) {
resp, err := e.apiClient.ImageBuild(context.Background(), *buildImage) // TODO(nishanttotla): buildcontext for image could be specific instead of nil
resp, err := e.apiClient.ImageBuild(context.Background(), buildContext, *buildImage)
e.CheckConnectionErr(err) e.CheckConnectionErr(err)
if err != nil { if err != nil {
return nil, err return nil, err
@ -1277,12 +1269,20 @@ func (e *Engine) BuildImage(buildImage *types.ImageBuildOptions) (io.ReadCloser,
func (e *Engine) TagImage(IDOrName string, repo string, tag string, force bool) error { func (e *Engine) TagImage(IDOrName string, repo string, tag string, force bool) error {
// send tag request to docker engine // send tag request to docker engine
opts := types.ImageTagOptions{ opts := types.ImageTagOptions{
ImageID: IDOrName, Force: force,
RepositoryName: repo,
Tag: tag,
Force: force,
} }
err := e.apiClient.ImageTag(context.Background(), opts) // TODO(nishanttotla): There might be a better way to pass a ref string than construct it here
// generate ref string
ref := repo
if tag != "" {
if strings.Contains(tag, ":") {
ref += "@" + tag
} else {
ref += ":" + tag
}
}
err := e.apiClient.ImageTag(context.Background(), IDOrName, ref, opts)
e.CheckConnectionErr(err) e.CheckConnectionErr(err)
if err != nil { if err != nil {
return err return err

View File

@ -256,15 +256,15 @@ func (c *Cluster) RemoveImages(name string, force bool) ([]types.ImageDelete, er
} }
// CreateNetwork creates a network in the cluster // CreateNetwork creates a network in the cluster
func (c *Cluster) CreateNetwork(request *types.NetworkCreate) (*types.NetworkCreateResponse, error) { func (c *Cluster) CreateNetwork(name string, request *types.NetworkCreate) (*types.NetworkCreateResponse, error) {
var ( var (
parts = strings.SplitN(request.Name, "/", 2) parts = strings.SplitN(name, "/", 2)
config = &cluster.ContainerConfig{} config = &cluster.ContainerConfig{}
) )
if len(parts) == 2 { if len(parts) == 2 {
// a node was specified, create the container only on this node // a node was specified, create the container only on this node
request.Name = parts[1] name = parts[1]
config = cluster.BuildContainerConfig(containertypes.Config{Env: []string{"constraint:node==" + parts[0]}}, containertypes.HostConfig{}, networktypes.NetworkingConfig{}) config = cluster.BuildContainerConfig(containertypes.Config{Env: []string{"constraint:node==" + parts[0]}}, containertypes.HostConfig{}, networktypes.NetworkingConfig{})
} }
@ -282,7 +282,7 @@ func (c *Cluster) CreateNetwork(request *types.NetworkCreate) (*types.NetworkCre
if !ok { if !ok {
return nil, fmt.Errorf("Unable to create network on agent %q", n.ID) return nil, fmt.Errorf("Unable to create network on agent %q", n.ID)
} }
resp, err := s.engine.CreateNetwork(request) resp, err := s.engine.CreateNetwork(name, request)
c.refreshNetworks() c.refreshNetworks()
return resp, err return resp, err
} }
@ -642,7 +642,7 @@ func (c *Cluster) RANDOMENGINE() (*cluster.Engine, error) {
} }
// BuildImage builds an image // BuildImage builds an image
func (c *Cluster) BuildImage(buildImage *types.ImageBuildOptions, out io.Writer) error { func (c *Cluster) BuildImage(buildContext io.Reader, buildImage *types.ImageBuildOptions, out io.Writer) error {
c.scheduler.Lock() c.scheduler.Lock()
// get an engine // get an engine
@ -661,7 +661,7 @@ func (c *Cluster) BuildImage(buildImage *types.ImageBuildOptions, out io.Writer)
} }
n := nodes[0] n := nodes[0]
reader, err := c.agents[n.ID].engine.BuildImage(buildImage) reader, err := c.agents[n.ID].engine.BuildImage(buildContext, buildImage)
if err != nil { if err != nil {
return err return err
} }

View File

@ -472,15 +472,15 @@ func (c *Cluster) refreshVolumes() {
} }
// CreateNetwork creates a network in the cluster // CreateNetwork creates a network in the cluster
func (c *Cluster) CreateNetwork(request *types.NetworkCreate) (response *types.NetworkCreateResponse, err error) { func (c *Cluster) CreateNetwork(name string, request *types.NetworkCreate) (response *types.NetworkCreateResponse, err error) {
var ( var (
parts = strings.SplitN(request.Name, "/", 2) parts = strings.SplitN(name, "/", 2)
config = &cluster.ContainerConfig{} config = &cluster.ContainerConfig{}
) )
if len(parts) == 2 { if len(parts) == 2 {
// a node was specified, create the container only on this node // a node was specified, create the container only on this node
request.Name = parts[1] name = parts[1]
config = cluster.BuildContainerConfig(containertypes.Config{Env: []string{"constraint:node==" + parts[0]}}, containertypes.HostConfig{}, networktypes.NetworkingConfig{}) config = cluster.BuildContainerConfig(containertypes.Config{Env: []string{"constraint:node==" + parts[0]}}, containertypes.HostConfig{}, networktypes.NetworkingConfig{})
} }
@ -489,7 +489,7 @@ func (c *Cluster) CreateNetwork(request *types.NetworkCreate) (response *types.N
return nil, err return nil, err
} }
if nodes != nil { if nodes != nil {
resp, err := c.engines[nodes[0].ID].CreateNetwork(request) resp, err := c.engines[nodes[0].ID].CreateNetwork(name, request)
if err == nil { if err == nil {
if network := c.engines[nodes[0].ID].Networks().Get(resp.ID); network != nil && network.Scope == "global" { if network := c.engines[nodes[0].ID].Networks().Get(resp.ID); network != nil && network.Scope == "global" {
for id, engine := range c.engines { for id, engine := range c.engines {
@ -903,7 +903,7 @@ func (c *Cluster) RenameContainer(container *cluster.Container, newName string)
} }
// BuildImage builds an image // BuildImage builds an image
func (c *Cluster) BuildImage(buildImage *types.ImageBuildOptions, out io.Writer) error { func (c *Cluster) BuildImage(buildContext io.Reader, buildImage *types.ImageBuildOptions, out io.Writer) error {
c.scheduler.Lock() c.scheduler.Lock()
// get an engine // get an engine
@ -918,7 +918,7 @@ func (c *Cluster) BuildImage(buildImage *types.ImageBuildOptions, out io.Writer)
} }
n := nodes[0] n := nodes[0]
reader, err := c.engines[n.ID].BuildImage(buildImage) reader, err := c.engines[n.ID].BuildImage(buildContext, buildImage)
if err != nil { if err != nil {
return err return err
} }