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
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 {
httpError(w, err.Error(), http.StatusBadRequest)
@ -631,7 +631,7 @@ func postNetworksCreate(c *context, w http.ResponseWriter, r *http.Request) {
request.Driver = "overlay"
}
response, err := c.cluster.CreateNetwork(&request)
response, err := c.cluster.CreateNetwork(request.Name, &request.NetworkCreate)
if err != nil {
httpError(w, err.Error(), http.StatusInternalServerError)
return
@ -1277,7 +1277,6 @@ func postBuild(c *context, w http.ResponseWriter, r *http.Request) {
CPUSetMems: r.Form.Get("cpusetmems"),
CgroupParent: r.Form.Get("cgroupparent"),
ShmSize: int64ValueOrZero(r, "shmsize"),
Context: r.Body,
}
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")
wf := NewWriteFlusher(w)
err := c.cluster.BuildImage(buildImage, wf)
err := c.cluster.BuildImage(r.Body, buildImage, wf)
if err != nil {
httpError(w, err.Error(), http.StatusInternalServerError)
}

View File

@ -39,7 +39,7 @@ type Cluster interface {
Networks() Networks
// 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
RemoveNetwork(network *Network) error
@ -95,7 +95,7 @@ type Cluster interface {
RenameContainer(container *Container, newName string) error
// Build an image
BuildImage(*types.ImageBuildOptions, io.Writer) error
BuildImage(io.Reader, *types.ImageBuildOptions, io.Writer) error
// Tag an image
TagImage(IDOrName string, repo string, tag string, force bool) error

View File

@ -17,7 +17,6 @@ import (
"golang.org/x/net/context"
log "github.com/Sirupsen/logrus"
"github.com/docker/distribution/reference"
"github.com/docker/docker/pkg/version"
engineapi "github.com/docker/engine-api/client"
"github.com/docker/engine-api/types"
@ -523,8 +522,8 @@ func (e *Engine) updateSpecs() error {
// RemoveImage deletes an image from the engine.
func (e *Engine) RemoveImage(name string, force bool) ([]types.ImageDelete, error) {
rmOpts := types.ImageRemoveOptions{name, force, true}
dels, err := e.apiClient.ImageRemove(context.Background(), rmOpts)
rmOpts := types.ImageRemoveOptions{force, true}
dels, err := e.apiClient.ImageRemove(context.Background(), name, rmOpts)
e.CheckConnectionErr(err)
e.RefreshImages()
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.
func (e *Engine) RemoveContainer(container *Container, force, volumes bool) error {
opts := types.ContainerRemoveOptions{
ContainerID: container.ID,
Force: force,
RemoveVolumes: volumes,
}
err := e.apiClient.ContainerRemove(context.Background(), opts)
err := e.apiClient.ContainerRemove(context.Background(), container.ID, opts)
e.CheckConnectionErr(err)
if err != nil {
return err
@ -936,8 +934,8 @@ func (e *Engine) RemoveContainer(container *Container, force, volumes bool) erro
}
// CreateNetwork creates a network in the engine
func (e *Engine) CreateNetwork(request *types.NetworkCreate) (*types.NetworkCreateResponse, error) {
response, err := e.apiClient.NetworkCreate(context.Background(), *request)
func (e *Engine) CreateNetwork(name string, request *types.NetworkCreate) (*types.NetworkCreateResponse, error) {
response, err := e.apiClient.NetworkCreate(context.Background(), name, *request)
e.CheckConnectionErr(err)
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
func (e *Engine) Pull(image string, authConfig *types.AuthConfig) error {
pullOpts, err := buildImagePullOptions(image)
if err != nil {
return err
// TODO(nishanttotla): RegistryAuth probably needs fixing
pullOpts := types.ImagePullOptions{
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)
if err != nil {
return err
@ -1052,13 +1030,25 @@ func (e *Engine) Load(reader io.Reader) error {
// Import image
func (e *Engine) Import(source string, repository string, tag string, imageReader io.Reader) error {
opts := types.ImageImportOptions{
SourceName: source,
RepositoryName: repository,
Tag: tag,
Source: imageReader,
importSrc := types.ImageImportSource{
Source: imageReader,
SourceName: source,
}
_, 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)
if err != nil {
return err
@ -1237,7 +1227,8 @@ func (e *Engine) StartContainer(id string, hostConfig *dockerclient.HostConfig)
if hostConfig != nil {
err = e.client.StartContainer(id, hostConfig)
} 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)
if err != nil {
@ -1264,8 +1255,9 @@ func (e *Engine) RenameContainer(container *Container, newName string) error {
}
// BuildImage builds an image
func (e *Engine) BuildImage(buildImage *types.ImageBuildOptions) (io.ReadCloser, error) {
resp, err := e.apiClient.ImageBuild(context.Background(), *buildImage)
func (e *Engine) BuildImage(buildContext io.Reader, buildImage *types.ImageBuildOptions) (io.ReadCloser, error) {
// TODO(nishanttotla): buildcontext for image could be specific instead of nil
resp, err := e.apiClient.ImageBuild(context.Background(), buildContext, *buildImage)
e.CheckConnectionErr(err)
if err != nil {
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 {
// send tag request to docker engine
opts := types.ImageTagOptions{
ImageID: IDOrName,
RepositoryName: repo,
Tag: tag,
Force: force,
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)
if err != nil {
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
func (c *Cluster) CreateNetwork(request *types.NetworkCreate) (*types.NetworkCreateResponse, error) {
func (c *Cluster) CreateNetwork(name string, request *types.NetworkCreate) (*types.NetworkCreateResponse, error) {
var (
parts = strings.SplitN(request.Name, "/", 2)
parts = strings.SplitN(name, "/", 2)
config = &cluster.ContainerConfig{}
)
if len(parts) == 2 {
// 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{})
}
@ -282,7 +282,7 @@ func (c *Cluster) CreateNetwork(request *types.NetworkCreate) (*types.NetworkCre
if !ok {
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()
return resp, err
}
@ -642,7 +642,7 @@ func (c *Cluster) RANDOMENGINE() (*cluster.Engine, error) {
}
// 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()
// get an engine
@ -661,7 +661,7 @@ func (c *Cluster) BuildImage(buildImage *types.ImageBuildOptions, out io.Writer)
}
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 {
return err
}

View File

@ -472,15 +472,15 @@ func (c *Cluster) refreshVolumes() {
}
// 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 (
parts = strings.SplitN(request.Name, "/", 2)
parts = strings.SplitN(name, "/", 2)
config = &cluster.ContainerConfig{}
)
if len(parts) == 2 {
// 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{})
}
@ -489,7 +489,7 @@ func (c *Cluster) CreateNetwork(request *types.NetworkCreate) (response *types.N
return nil, err
}
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 network := c.engines[nodes[0].ID].Networks().Get(resp.ID); network != nil && network.Scope == "global" {
for id, engine := range c.engines {
@ -903,7 +903,7 @@ func (c *Cluster) RenameContainer(container *cluster.Container, newName string)
}
// 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()
// get an engine
@ -918,7 +918,7 @@ func (c *Cluster) BuildImage(buildImage *types.ImageBuildOptions, out io.Writer)
}
n := nodes[0]
reader, err := c.engines[n.ID].BuildImage(buildImage)
reader, err := c.engines[n.ID].BuildImage(buildContext, buildImage)
if err != nil {
return err
}