|
@@ -39,22 +39,28 @@ func httpError(w http.ResponseWriter, err error) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-func getAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func writeJson(w http.ResponseWriter, b []byte) {
|
|
|
|
+ w.Header().Set("Content-Type", "application/json")
|
|
|
|
+ w.Write(b)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func getAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
config := &auth.AuthConfig{
|
|
config := &auth.AuthConfig{
|
|
Username: srv.runtime.authConfig.Username,
|
|
Username: srv.runtime.authConfig.Username,
|
|
Email: srv.runtime.authConfig.Email,
|
|
Email: srv.runtime.authConfig.Email,
|
|
}
|
|
}
|
|
b, err := json.Marshal(config)
|
|
b, err := json.Marshal(config)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
config := &auth.AuthConfig{}
|
|
config := &auth.AuthConfig{}
|
|
if err := json.NewDecoder(r.Body).Decode(config); err != nil {
|
|
if err := json.NewDecoder(r.Body).Decode(config); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
|
|
|
|
if config.Username == srv.runtime.authConfig.Username {
|
|
if config.Username == srv.runtime.authConfig.Username {
|
|
@@ -64,7 +70,7 @@ func postAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[stri
|
|
newAuthConfig := auth.NewAuthConfig(config.Username, config.Password, config.Email, srv.runtime.root)
|
|
newAuthConfig := auth.NewAuthConfig(config.Username, config.Password, config.Email, srv.runtime.root)
|
|
status, err := auth.Login(newAuthConfig)
|
|
status, err := auth.Login(newAuthConfig)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
} else {
|
|
} else {
|
|
srv.runtime.graph.getHttpClient().Jar = cookiejar.NewCookieJar()
|
|
srv.runtime.graph.getHttpClient().Jar = cookiejar.NewCookieJar()
|
|
srv.runtime.authConfig = newAuthConfig
|
|
srv.runtime.authConfig = newAuthConfig
|
|
@@ -72,38 +78,40 @@ func postAuth(srv *Server, w http.ResponseWriter, r *http.Request, vars map[stri
|
|
if status != "" {
|
|
if status != "" {
|
|
b, err := json.Marshal(&ApiAuth{Status: status})
|
|
b, err := json.Marshal(&ApiAuth{Status: status})
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusNoContent)
|
|
w.WriteHeader(http.StatusNoContent)
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getVersion(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getVersion(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
m := srv.DockerVersion()
|
|
m := srv.DockerVersion()
|
|
b, err := json.Marshal(m)
|
|
b, err := json.Marshal(m)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postContainersKill(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postContainersKill(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
if err := srv.ContainerKill(name); err != nil {
|
|
if err := srv.ContainerKill(name); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusNoContent)
|
|
w.WriteHeader(http.StatusNoContent)
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getContainersExport(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getContainersExport(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
|
|
|
|
@@ -111,12 +119,12 @@ func getContainersExport(srv *Server, w http.ResponseWriter, r *http.Request, va
|
|
Debugf("%s", err.Error())
|
|
Debugf("%s", err.Error())
|
|
//return nil, err
|
|
//return nil, err
|
|
}
|
|
}
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getImagesJson(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getImagesJson(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
|
|
|
|
all := r.Form.Get("all") == "1"
|
|
all := r.Form.Get("all") == "1"
|
|
@@ -125,66 +133,70 @@ func getImagesJson(srv *Server, w http.ResponseWriter, r *http.Request, vars map
|
|
|
|
|
|
outs, err := srv.Images(all, only_ids, filter)
|
|
outs, err := srv.Images(all, only_ids, filter)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
b, err := json.Marshal(outs)
|
|
b, err := json.Marshal(outs)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getImagesViz(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getImagesViz(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := srv.ImagesViz(w); err != nil {
|
|
if err := srv.ImagesViz(w); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getInfo(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getInfo(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
out := srv.DockerInfo()
|
|
out := srv.DockerInfo()
|
|
b, err := json.Marshal(out)
|
|
b, err := json.Marshal(out)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getImagesHistory(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getImagesHistory(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
outs, err := srv.ImageHistory(name)
|
|
outs, err := srv.ImageHistory(name)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
b, err := json.Marshal(outs)
|
|
b, err := json.Marshal(outs)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getContainersChanges(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getContainersChanges(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
changesStr, err := srv.ContainerChanges(name)
|
|
changesStr, err := srv.ContainerChanges(name)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
b, err := json.Marshal(changesStr)
|
|
b, err := json.Marshal(changesStr)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getContainersPs(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getContainersPs(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
all := r.Form.Get("all") == "1"
|
|
all := r.Form.Get("all") == "1"
|
|
trunc_cmd := r.Form.Get("trunc_cmd") != "0"
|
|
trunc_cmd := r.Form.Get("trunc_cmd") != "0"
|
|
@@ -199,33 +211,34 @@ func getContainersPs(srv *Server, w http.ResponseWriter, r *http.Request, vars m
|
|
outs := srv.Containers(all, trunc_cmd, only_ids, n, since, before)
|
|
outs := srv.Containers(all, trunc_cmd, only_ids, n, since, before)
|
|
b, err := json.Marshal(outs)
|
|
b, err := json.Marshal(outs)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postImagesTag(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postImagesTag(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
repo := r.Form.Get("repo")
|
|
repo := r.Form.Get("repo")
|
|
tag := r.Form.Get("tag")
|
|
tag := r.Form.Get("tag")
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
force := r.Form.Get("force") == "1"
|
|
force := r.Form.Get("force") == "1"
|
|
|
|
|
|
if err := srv.ContainerTag(name, repo, tag, force); err != nil {
|
|
if err := srv.ContainerTag(name, repo, tag, force); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusCreated)
|
|
w.WriteHeader(http.StatusCreated)
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postCommit(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postCommit(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
config := &Config{}
|
|
config := &Config{}
|
|
if err := json.NewDecoder(r.Body).Decode(config); err != nil {
|
|
if err := json.NewDecoder(r.Body).Decode(config); err != nil {
|
|
@@ -238,20 +251,21 @@ func postCommit(srv *Server, w http.ResponseWriter, r *http.Request, vars map[st
|
|
comment := r.Form.Get("comment")
|
|
comment := r.Form.Get("comment")
|
|
id, err := srv.ContainerCommit(container, repo, tag, author, comment, config)
|
|
id, err := srv.ContainerCommit(container, repo, tag, author, comment, config)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
b, err := json.Marshal(&ApiId{id})
|
|
b, err := json.Marshal(&ApiId{id})
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusCreated)
|
|
w.WriteHeader(http.StatusCreated)
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
// Creates an image from Pull or from Import
|
|
// Creates an image from Pull or from Import
|
|
-func postImagesCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postImagesCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
|
|
|
|
src := r.Form.Get("fromSrc")
|
|
src := r.Form.Get("fromSrc")
|
|
@@ -261,7 +275,7 @@ func postImagesCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars
|
|
|
|
|
|
in, out, err := hijackServer(w)
|
|
in, out, err := hijackServer(w)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
defer in.Close()
|
|
defer in.Close()
|
|
fmt.Fprintf(out, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
|
|
fmt.Fprintf(out, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
|
|
@@ -275,95 +289,96 @@ func postImagesCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars
|
|
fmt.Fprintf(out, "Error: %s\n", err)
|
|
fmt.Fprintf(out, "Error: %s\n", err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getImagesSearch(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getImagesSearch(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
|
|
|
|
term := r.Form.Get("term")
|
|
term := r.Form.Get("term")
|
|
outs, err := srv.ImagesSearch(term)
|
|
outs, err := srv.ImagesSearch(term)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
b, err := json.Marshal(outs)
|
|
b, err := json.Marshal(outs)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postImagesInsert(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postImagesInsert(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
|
|
|
|
url := r.Form.Get("url")
|
|
url := r.Form.Get("url")
|
|
path := r.Form.Get("path")
|
|
path := r.Form.Get("path")
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
|
|
|
|
in, out, err := hijackServer(w)
|
|
in, out, err := hijackServer(w)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
defer in.Close()
|
|
defer in.Close()
|
|
fmt.Fprintf(out, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
|
|
fmt.Fprintf(out, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
|
|
if err := srv.ImageInsert(name, url, path, out); err != nil {
|
|
if err := srv.ImageInsert(name, url, path, out); err != nil {
|
|
fmt.Fprintf(out, "Error: %s\n", err)
|
|
fmt.Fprintf(out, "Error: %s\n", err)
|
|
}
|
|
}
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postImagesPush(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postImagesPush(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
|
|
|
|
registry := r.Form.Get("registry")
|
|
registry := r.Form.Get("registry")
|
|
|
|
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
|
|
|
|
in, out, err := hijackServer(w)
|
|
in, out, err := hijackServer(w)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
defer in.Close()
|
|
defer in.Close()
|
|
fmt.Fprintf(out, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
|
|
fmt.Fprintf(out, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
|
|
if err := srv.ImagePush(name, registry, out); err != nil {
|
|
if err := srv.ImagePush(name, registry, out); err != nil {
|
|
fmt.Fprintln(out, "Error: %s\n", err)
|
|
fmt.Fprintln(out, "Error: %s\n", err)
|
|
}
|
|
}
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postBuild(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postBuild(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
in, out, err := hijackServer(w)
|
|
in, out, err := hijackServer(w)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
defer in.Close()
|
|
defer in.Close()
|
|
fmt.Fprintf(out, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
|
|
fmt.Fprintf(out, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
|
|
if err := srv.ImageCreateFromFile(in, out); err != nil {
|
|
if err := srv.ImageCreateFromFile(in, out); err != nil {
|
|
fmt.Fprintln(out, "Error: %s\n", err)
|
|
fmt.Fprintln(out, "Error: %s\n", err)
|
|
}
|
|
}
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postContainersCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postContainersCreate(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
config := &Config{}
|
|
config := &Config{}
|
|
if err := json.NewDecoder(r.Body).Decode(config); err != nil {
|
|
if err := json.NewDecoder(r.Body).Decode(config); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
id, err := srv.ContainerCreate(config)
|
|
id, err := srv.ContainerCreate(config)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
|
|
|
|
out := &ApiRun{
|
|
out := &ApiRun{
|
|
@@ -379,75 +394,76 @@ func postContainersCreate(srv *Server, w http.ResponseWriter, r *http.Request, v
|
|
}
|
|
}
|
|
b, err := json.Marshal(out)
|
|
b, err := json.Marshal(out)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusCreated)
|
|
w.WriteHeader(http.StatusCreated)
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postContainersRestart(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postContainersRestart(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
t, err := strconv.Atoi(r.Form.Get("t"))
|
|
t, err := strconv.Atoi(r.Form.Get("t"))
|
|
if err != nil || t < 0 {
|
|
if err != nil || t < 0 {
|
|
t = 10
|
|
t = 10
|
|
}
|
|
}
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
if err := srv.ContainerRestart(name, t); err != nil {
|
|
if err := srv.ContainerRestart(name, t); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusNoContent)
|
|
w.WriteHeader(http.StatusNoContent)
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func deleteContainers(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func deleteContainers(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
removeVolume := r.Form.Get("v") == "1"
|
|
removeVolume := r.Form.Get("v") == "1"
|
|
|
|
|
|
if err := srv.ContainerDestroy(name, removeVolume); err != nil {
|
|
if err := srv.ContainerDestroy(name, removeVolume); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusNoContent)
|
|
w.WriteHeader(http.StatusNoContent)
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func deleteImages(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func deleteImages(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
if err := srv.ImageDelete(name); err != nil {
|
|
if err := srv.ImageDelete(name); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusNoContent)
|
|
w.WriteHeader(http.StatusNoContent)
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postContainersStart(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postContainersStart(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
if err := srv.ContainerStart(name); err != nil {
|
|
if err := srv.ContainerStart(name); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusNoContent)
|
|
w.WriteHeader(http.StatusNoContent)
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postContainersStop(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postContainersStop(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
t, err := strconv.Atoi(r.Form.Get("t"))
|
|
t, err := strconv.Atoi(r.Form.Get("t"))
|
|
if err != nil || t < 0 {
|
|
if err != nil || t < 0 {
|
|
@@ -455,36 +471,37 @@ func postContainersStop(srv *Server, w http.ResponseWriter, r *http.Request, var
|
|
}
|
|
}
|
|
|
|
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
|
|
|
|
if err := srv.ContainerStop(name, t); err != nil {
|
|
if err := srv.ContainerStop(name, t); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusNoContent)
|
|
w.WriteHeader(http.StatusNoContent)
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postContainersWait(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postContainersWait(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
status, err := srv.ContainerWait(name)
|
|
status, err := srv.ContainerWait(name)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
b, err := json.Marshal(&ApiWait{StatusCode: status})
|
|
b, err := json.Marshal(&ApiWait{StatusCode: status})
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func postContainersAttach(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func postContainersAttach(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if err := parseForm(r); err != nil {
|
|
if err := parseForm(r); err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
logs := r.Form.Get("logs") == "1"
|
|
logs := r.Form.Get("logs") == "1"
|
|
stream := r.Form.Get("stream") == "1"
|
|
stream := r.Form.Get("stream") == "1"
|
|
@@ -492,13 +509,13 @@ func postContainersAttach(srv *Server, w http.ResponseWriter, r *http.Request, v
|
|
stdout := r.Form.Get("stdout") == "1"
|
|
stdout := r.Form.Get("stdout") == "1"
|
|
stderr := r.Form.Get("stderr") == "1"
|
|
stderr := r.Form.Get("stderr") == "1"
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
|
|
|
|
in, out, err := hijackServer(w)
|
|
in, out, err := hijackServer(w)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
defer in.Close()
|
|
defer in.Close()
|
|
|
|
|
|
@@ -506,48 +523,50 @@ func postContainersAttach(srv *Server, w http.ResponseWriter, r *http.Request, v
|
|
if err := srv.ContainerAttach(name, logs, stream, stdin, stdout, stderr, in, out); err != nil {
|
|
if err := srv.ContainerAttach(name, logs, stream, stdin, stdout, stderr, in, out); err != nil {
|
|
fmt.Fprintf(out, "Error: %s\n", err)
|
|
fmt.Fprintf(out, "Error: %s\n", err)
|
|
}
|
|
}
|
|
- return nil, nil
|
|
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getContainersByName(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getContainersByName(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
|
|
|
|
container, err := srv.ContainerInspect(name)
|
|
container, err := srv.ContainerInspect(name)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
b, err := json.Marshal(container)
|
|
b, err := json.Marshal(container)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func getImagesByName(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) ([]byte, error) {
|
|
|
|
|
|
+func getImagesByName(srv *Server, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
if vars == nil {
|
|
if vars == nil {
|
|
- return nil, fmt.Errorf("Missing parameter")
|
|
|
|
|
|
+ return fmt.Errorf("Missing parameter")
|
|
}
|
|
}
|
|
name := vars["name"]
|
|
name := vars["name"]
|
|
|
|
|
|
image, err := srv.ImageInspect(name)
|
|
image, err := srv.ImageInspect(name)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
b, err := json.Marshal(image)
|
|
b, err := json.Marshal(image)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- return b, nil
|
|
|
|
|
|
+ writeJson(w, b)
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
func ListenAndServe(addr string, srv *Server, logging bool) error {
|
|
func ListenAndServe(addr string, srv *Server, logging bool) error {
|
|
r := mux.NewRouter()
|
|
r := mux.NewRouter()
|
|
log.Printf("Listening for HTTP on %s\n", addr)
|
|
log.Printf("Listening for HTTP on %s\n", addr)
|
|
|
|
|
|
- m := map[string]map[string]func(*Server, http.ResponseWriter, *http.Request, map[string]string) ([]byte, error){
|
|
|
|
|
|
+ m := map[string]map[string]func(*Server, http.ResponseWriter, *http.Request, map[string]string) error{
|
|
"GET": {
|
|
"GET": {
|
|
"/auth": getAuth,
|
|
"/auth": getAuth,
|
|
"/version": getVersion,
|
|
"/version": getVersion,
|
|
@@ -602,14 +621,9 @@ func ListenAndServe(addr string, srv *Server, logging bool) error {
|
|
Debugf("Warning: client and server don't have the same version (client: %s, server: %s)", userAgent[1], VERSION)
|
|
Debugf("Warning: client and server don't have the same version (client: %s, server: %s)", userAgent[1], VERSION)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- json, err := localFct(srv, w, r, mux.Vars(r))
|
|
|
|
- if err != nil {
|
|
|
|
|
|
+ if err := localFct(srv, w, r, mux.Vars(r)); err != nil {
|
|
httpError(w, err)
|
|
httpError(w, err)
|
|
}
|
|
}
|
|
- if json != nil {
|
|
|
|
- w.Header().Set("Content-Type", "application/json")
|
|
|
|
- w.Write(json)
|
|
|
|
- }
|
|
|
|
})
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|