mirror of https://github.com/docker/docs.git
Changing relevant function calls for updated engine-api
Signed-off-by: Nishant Totla <nishanttotla@gmail.com>
This commit is contained in:
parent
8fd494ba58
commit
82f1bfe0ec
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue