mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
split API into 2 go packages
Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
This commit is contained in:
parent
b936f4f5e1
commit
a7365a6237
5 changed files with 45 additions and 37 deletions
|
@ -1,4 +1,4 @@
|
||||||
package api
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
@ -8,6 +8,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/dotcloud/docker/api"
|
||||||
"github.com/dotcloud/docker/archive"
|
"github.com/dotcloud/docker/archive"
|
||||||
"github.com/dotcloud/docker/dockerversion"
|
"github.com/dotcloud/docker/dockerversion"
|
||||||
"github.com/dotcloud/docker/engine"
|
"github.com/dotcloud/docker/engine"
|
||||||
|
@ -81,7 +82,7 @@ func (cli *DockerCli) CmdHelp(args ...string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
help := fmt.Sprintf("Usage: docker [OPTIONS] COMMAND [arg...]\n -H=[unix://%s]: tcp://host:port to bind/connect to or unix://path/to/socket to use\n\nA self-sufficient runtime for linux containers.\n\nCommands:\n", DEFAULTUNIXSOCKET)
|
help := fmt.Sprintf("Usage: docker [OPTIONS] COMMAND [arg...]\n -H=[unix://%s]: tcp://host:port to bind/connect to or unix://path/to/socket to use\n\nA self-sufficient runtime for linux containers.\n\nCommands:\n", api.DEFAULTUNIXSOCKET)
|
||||||
for _, command := range [][]string{
|
for _, command := range [][]string{
|
||||||
{"attach", "Attach to a running container"},
|
{"attach", "Attach to a running container"},
|
||||||
{"build", "Build a container from a Dockerfile"},
|
{"build", "Build a container from a Dockerfile"},
|
||||||
|
@ -610,7 +611,7 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
container := &Container{}
|
container := &api.Container{}
|
||||||
err = json.Unmarshal(body, container)
|
err = json.Unmarshal(body, container)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -797,9 +798,13 @@ func (cli *DockerCli) CmdPort(args ...string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
port := cmd.Arg(1)
|
var (
|
||||||
proto := "tcp"
|
port = cmd.Arg(1)
|
||||||
parts := strings.SplitN(port, "/", 2)
|
proto = "tcp"
|
||||||
|
parts = strings.SplitN(port, "/", 2)
|
||||||
|
container api.Container
|
||||||
|
)
|
||||||
|
|
||||||
if len(parts) == 2 && len(parts[1]) != 0 {
|
if len(parts) == 2 && len(parts[1]) != 0 {
|
||||||
port = parts[0]
|
port = parts[0]
|
||||||
proto = parts[1]
|
proto = parts[1]
|
||||||
|
@ -808,13 +813,13 @@ func (cli *DockerCli) CmdPort(args ...string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
var out Container
|
|
||||||
err = json.Unmarshal(body, &out)
|
err = json.Unmarshal(body, &container)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if frontends, exists := out.NetworkSettings.Ports[nat.Port(port+"/"+proto)]; exists && frontends != nil {
|
if frontends, exists := container.NetworkSettings.Ports[nat.Port(port+"/"+proto)]; exists && frontends != nil {
|
||||||
for _, frontend := range frontends {
|
for _, frontend := range frontends {
|
||||||
fmt.Fprintf(cli.out, "%s:%s\n", frontend.HostIp, frontend.HostPort)
|
fmt.Fprintf(cli.out, "%s:%s\n", frontend.HostIp, frontend.HostPort)
|
||||||
}
|
}
|
||||||
|
@ -1425,7 +1430,7 @@ func (cli *DockerCli) CmdPs(args ...string) error {
|
||||||
outCommand = utils.Trunc(outCommand, 20)
|
outCommand = utils.Trunc(outCommand, 20)
|
||||||
}
|
}
|
||||||
ports.ReadListFrom([]byte(out.Get("Ports")))
|
ports.ReadListFrom([]byte(out.Get("Ports")))
|
||||||
fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\t%s\t%s\t", outID, out.Get("Image"), outCommand, utils.HumanDuration(time.Now().UTC().Sub(time.Unix(out.GetInt64("Created"), 0))), out.Get("Status"), displayablePorts(ports), strings.Join(outNames, ","))
|
fmt.Fprintf(w, "%s\t%s\t%s\t%s ago\t%s\t%s\t%s\t", outID, out.Get("Image"), outCommand, utils.HumanDuration(time.Now().UTC().Sub(time.Unix(out.GetInt64("Created"), 0))), out.Get("Status"), api.DisplayablePorts(ports), strings.Join(outNames, ","))
|
||||||
if *size {
|
if *size {
|
||||||
if out.GetInt("SizeRootFs") > 0 {
|
if out.GetInt("SizeRootFs") > 0 {
|
||||||
fmt.Fprintf(w, "%s (virtual %s)\n", utils.HumanSize(out.GetInt64("SizeRw")), utils.HumanSize(out.GetInt64("SizeRootFs")))
|
fmt.Fprintf(w, "%s (virtual %s)\n", utils.HumanSize(out.GetInt64("SizeRw")), utils.HumanSize(out.GetInt64("SizeRootFs")))
|
||||||
|
@ -1606,7 +1611,7 @@ func (cli *DockerCli) CmdLogs(args ...string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
container := &Container{}
|
container := &api.Container{}
|
||||||
err = json.Unmarshal(body, container)
|
err = json.Unmarshal(body, container)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -1643,7 +1648,7 @@ func (cli *DockerCli) CmdAttach(args ...string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
container := &Container{}
|
container := &api.Container{}
|
||||||
err = json.Unmarshal(body, container)
|
err = json.Unmarshal(body, container)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -2159,7 +2164,7 @@ func (cli *DockerCli) call(method, path string, data interface{}, passAuthInfo b
|
||||||
re := regexp.MustCompile("/+")
|
re := regexp.MustCompile("/+")
|
||||||
path = re.ReplaceAllString(path, "/")
|
path = re.ReplaceAllString(path, "/")
|
||||||
|
|
||||||
req, err := http.NewRequest(method, fmt.Sprintf("/v%s%s", APIVERSION, path), params)
|
req, err := http.NewRequest(method, fmt.Sprintf("/v%s%s", api.APIVERSION, path), params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, -1, err
|
return nil, -1, err
|
||||||
}
|
}
|
||||||
|
@ -2236,7 +2241,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer, h
|
||||||
re := regexp.MustCompile("/+")
|
re := regexp.MustCompile("/+")
|
||||||
path = re.ReplaceAllString(path, "/")
|
path = re.ReplaceAllString(path, "/")
|
||||||
|
|
||||||
req, err := http.NewRequest(method, fmt.Sprintf("/v%s%s", APIVERSION, path), in)
|
req, err := http.NewRequest(method, fmt.Sprintf("/v%s%s", api.APIVERSION, path), in)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -2281,7 +2286,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer, h
|
||||||
return fmt.Errorf("Error: %s", bytes.TrimSpace(body))
|
return fmt.Errorf("Error: %s", bytes.TrimSpace(body))
|
||||||
}
|
}
|
||||||
|
|
||||||
if MatchesContentType(resp.Header.Get("Content-Type"), "application/json") {
|
if api.MatchesContentType(resp.Header.Get("Content-Type"), "application/json") {
|
||||||
return utils.DisplayJSONMessagesStream(resp.Body, out, cli.terminalFd, cli.isTerminal)
|
return utils.DisplayJSONMessagesStream(resp.Body, out, cli.terminalFd, cli.isTerminal)
|
||||||
}
|
}
|
||||||
if _, err := io.Copy(out, resp.Body); err != nil {
|
if _, err := io.Copy(out, resp.Body); err != nil {
|
||||||
|
@ -2300,7 +2305,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.Rea
|
||||||
re := regexp.MustCompile("/+")
|
re := regexp.MustCompile("/+")
|
||||||
path = re.ReplaceAllString(path, "/")
|
path = re.ReplaceAllString(path, "/")
|
||||||
|
|
||||||
req, err := http.NewRequest(method, fmt.Sprintf("/v%s%s", APIVERSION, path), nil)
|
req, err := http.NewRequest(method, fmt.Sprintf("/v%s%s", api.APIVERSION, path), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -2484,7 +2489,7 @@ func getExitCode(cli *DockerCli, containerId string) (bool, int, error) {
|
||||||
}
|
}
|
||||||
return false, -1, nil
|
return false, -1, nil
|
||||||
}
|
}
|
||||||
c := &Container{}
|
c := &api.Container{}
|
||||||
if err := json.Unmarshal(body, c); err != nil {
|
if err := json.Unmarshal(body, c); err != nil {
|
||||||
return false, -1, err
|
return false, -1, err
|
||||||
}
|
}
|
|
@ -23,7 +23,7 @@ func ValidateHost(val string) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO remove, used on < 1.5 in getContainersJSON
|
//TODO remove, used on < 1.5 in getContainersJSON
|
||||||
func displayablePorts(ports *engine.Table) string {
|
func DisplayablePorts(ports *engine.Table) string {
|
||||||
result := []string{}
|
result := []string{}
|
||||||
ports.SetKey("PublicPort")
|
ports.SetKey("PublicPort")
|
||||||
ports.Sort()
|
ports.Sort()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package api
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
@ -10,14 +10,6 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"expvar"
|
"expvar"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/dotcloud/docker/engine"
|
|
||||||
"github.com/dotcloud/docker/pkg/listenbuffer"
|
|
||||||
"github.com/dotcloud/docker/pkg/systemd"
|
|
||||||
"github.com/dotcloud/docker/pkg/user"
|
|
||||||
"github.com/dotcloud/docker/pkg/version"
|
|
||||||
"github.com/dotcloud/docker/registry"
|
|
||||||
"github.com/dotcloud/docker/utils"
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
|
@ -28,6 +20,16 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/dotcloud/docker/api"
|
||||||
|
"github.com/dotcloud/docker/engine"
|
||||||
|
"github.com/dotcloud/docker/pkg/listenbuffer"
|
||||||
|
"github.com/dotcloud/docker/pkg/systemd"
|
||||||
|
"github.com/dotcloud/docker/pkg/user"
|
||||||
|
"github.com/dotcloud/docker/pkg/version"
|
||||||
|
"github.com/dotcloud/docker/registry"
|
||||||
|
"github.com/dotcloud/docker/utils"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -315,7 +317,7 @@ func getContainersJSON(eng *engine.Engine, version version.Version, w http.Respo
|
||||||
for _, out := range outs.Data {
|
for _, out := range outs.Data {
|
||||||
ports := engine.NewTable("", 0)
|
ports := engine.NewTable("", 0)
|
||||||
ports.ReadListFrom([]byte(out.Get("Ports")))
|
ports.ReadListFrom([]byte(out.Get("Ports")))
|
||||||
out.Set("Ports", displayablePorts(ports))
|
out.Set("Ports", api.DisplayablePorts(ports))
|
||||||
}
|
}
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
if _, err = outs.WriteListTo(w); err != nil {
|
if _, err = outs.WriteListTo(w); err != nil {
|
||||||
|
@ -638,7 +640,7 @@ func postContainersStart(eng *engine.Engine, version version.Version, w http.Res
|
||||||
job := eng.Job("start", name)
|
job := eng.Job("start", name)
|
||||||
// allow a nil body for backwards compatibility
|
// allow a nil body for backwards compatibility
|
||||||
if r.Body != nil {
|
if r.Body != nil {
|
||||||
if MatchesContentType(r.Header.Get("Content-Type"), "application/json") {
|
if api.MatchesContentType(r.Header.Get("Content-Type"), "application/json") {
|
||||||
if err := job.DecodeEnv(r.Body); err != nil {
|
if err := job.DecodeEnv(r.Body); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -885,7 +887,7 @@ func postContainersCopy(eng *engine.Engine, version version.Version, w http.Resp
|
||||||
|
|
||||||
var copyData engine.Env
|
var copyData engine.Env
|
||||||
|
|
||||||
if contentType := r.Header.Get("Content-Type"); MatchesContentType(contentType, "application/json") {
|
if contentType := r.Header.Get("Content-Type"); api.MatchesContentType(contentType, "application/json") {
|
||||||
if err := copyData.Decode(r.Body); err != nil {
|
if err := copyData.Decode(r.Body); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -943,14 +945,14 @@ func makeHttpHandler(eng *engine.Engine, logging bool, localMethod string, local
|
||||||
}
|
}
|
||||||
version := version.Version(mux.Vars(r)["version"])
|
version := version.Version(mux.Vars(r)["version"])
|
||||||
if version == "" {
|
if version == "" {
|
||||||
version = APIVERSION
|
version = api.APIVERSION
|
||||||
}
|
}
|
||||||
if enableCors {
|
if enableCors {
|
||||||
writeCorsHeaders(w, r)
|
writeCorsHeaders(w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
if version.GreaterThan(APIVERSION) {
|
if version.GreaterThan(api.APIVERSION) {
|
||||||
http.Error(w, fmt.Errorf("client and server don't have same version (client : %s, server: %s)", version, APIVERSION).Error(), http.StatusNotFound)
|
http.Error(w, fmt.Errorf("client and server don't have same version (client : %s, server: %s)", version, api.APIVERSION).Error(), http.StatusNotFound)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package builtins
|
package builtins
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/dotcloud/docker/api"
|
api "github.com/dotcloud/docker/api/server"
|
||||||
"github.com/dotcloud/docker/engine"
|
"github.com/dotcloud/docker/engine"
|
||||||
"github.com/dotcloud/docker/runtime/networkdriver/bridge"
|
"github.com/dotcloud/docker/runtime/networkdriver/bridge"
|
||||||
"github.com/dotcloud/docker/server"
|
"github.com/dotcloud/docker/server"
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/dotcloud/docker/api"
|
"github.com/dotcloud/docker/api"
|
||||||
|
"github.com/dotcloud/docker/api/client"
|
||||||
"github.com/dotcloud/docker/builtins"
|
"github.com/dotcloud/docker/builtins"
|
||||||
"github.com/dotcloud/docker/dockerversion"
|
"github.com/dotcloud/docker/dockerversion"
|
||||||
"github.com/dotcloud/docker/engine"
|
"github.com/dotcloud/docker/engine"
|
||||||
|
@ -178,7 +179,7 @@ func main() {
|
||||||
protoAddrParts := strings.SplitN(flHosts.GetAll()[0], "://", 2)
|
protoAddrParts := strings.SplitN(flHosts.GetAll()[0], "://", 2)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
cli *api.DockerCli
|
cli *client.DockerCli
|
||||||
tlsConfig tls.Config
|
tlsConfig tls.Config
|
||||||
)
|
)
|
||||||
tlsConfig.InsecureSkipVerify = true
|
tlsConfig.InsecureSkipVerify = true
|
||||||
|
@ -211,9 +212,9 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if *flTls || *flTlsVerify {
|
if *flTls || *flTlsVerify {
|
||||||
cli = api.NewDockerCli(os.Stdin, os.Stdout, os.Stderr, protoAddrParts[0], protoAddrParts[1], &tlsConfig)
|
cli = client.NewDockerCli(os.Stdin, os.Stdout, os.Stderr, protoAddrParts[0], protoAddrParts[1], &tlsConfig)
|
||||||
} else {
|
} else {
|
||||||
cli = api.NewDockerCli(os.Stdin, os.Stdout, os.Stderr, protoAddrParts[0], protoAddrParts[1], nil)
|
cli = client.NewDockerCli(os.Stdin, os.Stdout, os.Stderr, protoAddrParts[0], protoAddrParts[1], nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cli.ParseCommands(flag.Args()...); err != nil {
|
if err := cli.ParseCommands(flag.Args()...); err != nil {
|
||||||
|
|
Loading…
Reference in a new issue