From de35b346d17ef86ef091e1736575c60c41fc3771 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Sun, 8 Dec 2013 07:41:53 +0000 Subject: [PATCH] Port 'docker version' to the engine API --- api.go | 3 ++- api_params.go | 6 ------ commands.go | 25 ++++++++++++------------- integration/api_test.go | 15 +++++++++++---- server.go | 8 -------- 5 files changed, 25 insertions(+), 32 deletions(-) diff --git a/api.go b/api.go index 0aa9695702..879c688c01 100644 --- a/api.go +++ b/api.go @@ -140,7 +140,8 @@ func postAuth(srv *Server, version float64, w http.ResponseWriter, r *http.Reque } func getVersion(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { - return writeJSON(w, http.StatusOK, srv.DockerVersion()) + srv.Eng.ServeHTTP(w, r) + return nil } func postContainersKill(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { diff --git a/api_params.go b/api_params.go index a1bdd3e147..411cafae2e 100644 --- a/api_params.go +++ b/api_params.go @@ -95,12 +95,6 @@ type ( IP string } - APIVersion struct { - Version string - GitCommit string `json:",omitempty"` - GoVersion string `json:",omitempty"` - } - APIWait struct { StatusCode int } diff --git a/commands.go b/commands.go index 48c0241b17..1532aef769 100644 --- a/commands.go +++ b/commands.go @@ -11,6 +11,7 @@ import ( "fmt" "github.com/dotcloud/docker/archive" "github.com/dotcloud/docker/auth" + "github.com/dotcloud/docker/engine" "github.com/dotcloud/docker/registry" "github.com/dotcloud/docker/term" "github.com/dotcloud/docker/utils" @@ -391,26 +392,24 @@ func (cli *DockerCli) CmdVersion(args ...string) error { return err } - var out APIVersion - err = json.Unmarshal(body, &out) + out := engine.NewOutput() + remoteVersion, err := out.AddEnv() if err != nil { - utils.Errorf("Error unmarshal: body: %s, err: %s\n", body, err) + utils.Errorf("Error reading remote version: %s\n", err) return err } - if out.Version != "" { - fmt.Fprintf(cli.out, "Server version: %s\n", out.Version) + if _, err := out.Write(body); err != nil { + utils.Errorf("Error reading remote version: %s\n", err) + return err } - if out.GitCommit != "" { - fmt.Fprintf(cli.out, "Git commit (server): %s\n", out.GitCommit) - } - if out.GoVersion != "" { - fmt.Fprintf(cli.out, "Go version (server): %s\n", out.GoVersion) - } - + out.Close() + fmt.Fprintf(cli.out, "Server version: %s\n", remoteVersion.Get("Version")) + fmt.Fprintf(cli.out, "Git commit (server): %s\n", remoteVersion.Get("GitCommit")) + fmt.Fprintf(cli.out, "Go version (server): %s\n", remoteVersion.Get("GoVersion")) release := utils.GetReleaseVersion() if release != "" { fmt.Fprintf(cli.out, "Last stable version: %s", release) - if (VERSION != "" || out.Version != "") && (strings.Trim(VERSION, "-dev") != release || strings.Trim(out.Version, "-dev") != release) { + if (VERSION != "" || remoteVersion.Exists("Version")) && (strings.Trim(VERSION, "-dev") != release || strings.Trim(remoteVersion.Get("Version"), "-dev") != release) { fmt.Fprintf(cli.out, ", please update docker") } fmt.Fprintf(cli.out, "\n") diff --git a/integration/api_test.go b/integration/api_test.go index 896831c3d0..819c43a8a5 100644 --- a/integration/api_test.go +++ b/integration/api_test.go @@ -7,6 +7,7 @@ import ( "encoding/json" "fmt" "github.com/dotcloud/docker" + "github.com/dotcloud/docker/engine" "github.com/dotcloud/docker/utils" "io" "net" @@ -35,12 +36,18 @@ func TestGetVersion(t *testing.T) { } assertHttpNotError(r, t) - v := &docker.APIVersion{} - if err = json.Unmarshal(r.Body.Bytes(), v); err != nil { + out := engine.NewOutput() + v, err := out.AddEnv() + if err != nil { t.Fatal(err) } - if v.Version != docker.VERSION { - t.Errorf("Expected version %s, %s found", docker.VERSION, v.Version) + if _, err := io.Copy(out, r.Body); err != nil { + t.Fatal(err) + } + out.Close() + expected := docker.VERSION + if result := v.Get("Version"); result != expected { + t.Errorf("Expected version %s, %s found", expected, result) } } diff --git a/server.go b/server.go index c23e9477e3..e948de8346 100644 --- a/server.go +++ b/server.go @@ -118,14 +118,6 @@ func (srv *Server) ListenAndServe(job *engine.Job) engine.Status { return engine.StatusOK } -func (srv *Server) DockerVersion() APIVersion { - return APIVersion{ - Version: VERSION, - GitCommit: GITCOMMIT, - GoVersion: runtime.Version(), - } -} - // simpleVersionInfo is a simple implementation of // the interface VersionInfo, which is used // to provide version information for some product,