Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
| ... | ... |
@@ -838,41 +838,42 @@ func getContainersByName(srv *Server, version float64, w http.ResponseWriter, r |
| 838 | 838 |
if vars == nil {
|
| 839 | 839 |
return fmt.Errorf("Missing parameter")
|
| 840 | 840 |
} |
| 841 |
- name := vars["name"] |
|
| 841 |
+ var ( |
|
| 842 |
+ buffer = bytes.NewBuffer(nil) |
|
| 843 |
+ job = srv.Eng.Job("inspect_container", vars["name"])
|
|
| 844 |
+ ) |
|
| 842 | 845 |
|
| 843 |
- container, err := srv.ContainerInspect(name) |
|
| 844 |
- if err != nil {
|
|
| 846 |
+ job.Stdout.Add(buffer) |
|
| 847 |
+ if err := job.Run(); err != nil {
|
|
| 845 | 848 |
return err |
| 846 | 849 |
} |
| 847 | 850 |
|
| 848 |
- _, err = srv.ImageInspect(name) |
|
| 849 |
- if err == nil {
|
|
| 851 |
+ if err := srv.Eng.Job("inspect_image", vars["name"]).Run(); err == nil {
|
|
| 850 | 852 |
return fmt.Errorf("Conflict between containers and images")
|
| 851 | 853 |
} |
| 852 |
- |
|
| 853 |
- container.readHostConfig() |
|
| 854 |
- c := APIContainer{container, container.hostConfig}
|
|
| 855 |
- |
|
| 856 |
- return writeJSON(w, http.StatusOK, c) |
|
| 854 |
+ _, err := io.Copy(w, buffer) |
|
| 855 |
+ return err |
|
| 857 | 856 |
} |
| 858 | 857 |
|
| 859 | 858 |
func getImagesByName(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
| 860 | 859 |
if vars == nil {
|
| 861 | 860 |
return fmt.Errorf("Missing parameter")
|
| 862 | 861 |
} |
| 863 |
- name := vars["name"] |
|
| 862 |
+ var ( |
|
| 863 |
+ buffer = bytes.NewBuffer(nil) |
|
| 864 |
+ job = srv.Eng.Job("inspect_image", vars["name"])
|
|
| 865 |
+ ) |
|
| 864 | 866 |
|
| 865 |
- image, err := srv.ImageInspect(name) |
|
| 866 |
- if err != nil {
|
|
| 867 |
+ job.Stdout.Add(buffer) |
|
| 868 |
+ if err := job.Run(); err != nil {
|
|
| 867 | 869 |
return err |
| 868 | 870 |
} |
| 869 | 871 |
|
| 870 |
- _, err = srv.ContainerInspect(name) |
|
| 871 |
- if err == nil {
|
|
| 872 |
+ if err := srv.Eng.Job("inspect_container", vars["name"]).Run(); err == nil {
|
|
| 872 | 873 |
return fmt.Errorf("Conflict between containers and images")
|
| 873 | 874 |
} |
| 874 |
- |
|
| 875 |
- return writeJSON(w, http.StatusOK, image) |
|
| 875 |
+ _, err := io.Copy(w, buffer) |
|
| 876 |
+ return err |
|
| 876 | 877 |
} |
| 877 | 878 |
|
| 878 | 879 |
func postBuild(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
| ... | ... |
@@ -337,6 +337,14 @@ func (srv *Server) ImageExport(job *engine.Job) engine.Status {
|
| 337 | 337 |
job.Error(err) |
| 338 | 338 |
return engine.StatusErr |
| 339 | 339 |
} |
| 340 |
+ if err := job.Eng.Register("inspect_image", srv.JobImageInspect); err != nil {
|
|
| 341 |
+ job.Error(err) |
|
| 342 |
+ return engine.StatusErr |
|
| 343 |
+ } |
|
| 344 |
+ if err := job.Eng.Register("inspect_container", srv.JobContainerInspect); err != nil {
|
|
| 345 |
+ job.Error(err) |
|
| 346 |
+ return engine.StatusErr |
|
| 347 |
+ } |
|
| 340 | 348 |
return engine.StatusOK |
| 341 | 349 |
} |
| 342 | 350 |
|
| ... | ... |
@@ -2303,6 +2311,31 @@ func (srv *Server) ContainerInspect(name string) (*Container, error) {
|
| 2303 | 2303 |
return nil, fmt.Errorf("No such container: %s", name)
|
| 2304 | 2304 |
} |
| 2305 | 2305 |
|
| 2306 |
+func (srv *Server) JobContainerInspect(job *engine.Job) engine.Status {
|
|
| 2307 |
+ if n := len(job.Args); n != 1 {
|
|
| 2308 |
+ job.Errorf("Usage: %s CONTAINER", job.Name)
|
|
| 2309 |
+ return engine.StatusErr |
|
| 2310 |
+ } |
|
| 2311 |
+ container, err := srv.ContainerInspect(job.Args[0]) |
|
| 2312 |
+ if err != nil {
|
|
| 2313 |
+ job.Error(err) |
|
| 2314 |
+ return engine.StatusErr |
|
| 2315 |
+ } |
|
| 2316 |
+ |
|
| 2317 |
+ type HostConfigPacker struct {
|
|
| 2318 |
+ *Container |
|
| 2319 |
+ HostConfig *HostConfig |
|
| 2320 |
+ } |
|
| 2321 |
+ |
|
| 2322 |
+ b, err := json.Marshal(&HostConfigPacker{container, container.hostConfig})
|
|
| 2323 |
+ if err != nil {
|
|
| 2324 |
+ job.Error(err) |
|
| 2325 |
+ return engine.StatusErr |
|
| 2326 |
+ } |
|
| 2327 |
+ job.Stdout.Write(b) |
|
| 2328 |
+ return engine.StatusOK |
|
| 2329 |
+} |
|
| 2330 |
+ |
|
| 2306 | 2331 |
func (srv *Server) ImageInspect(name string) (*Image, error) {
|
| 2307 | 2332 |
if image, err := srv.runtime.repositories.LookupImage(name); err == nil && image != nil {
|
| 2308 | 2333 |
return image, nil |
| ... | ... |
@@ -2310,6 +2343,25 @@ func (srv *Server) ImageInspect(name string) (*Image, error) {
|
| 2310 | 2310 |
return nil, fmt.Errorf("No such image: %s", name)
|
| 2311 | 2311 |
} |
| 2312 | 2312 |
|
| 2313 |
+func (srv *Server) JobImageInspect(job *engine.Job) engine.Status {
|
|
| 2314 |
+ if n := len(job.Args); n != 1 {
|
|
| 2315 |
+ job.Errorf("Usage: %s IMAGE", job.Name)
|
|
| 2316 |
+ return engine.StatusErr |
|
| 2317 |
+ } |
|
| 2318 |
+ image, err := srv.ImageInspect(job.Args[0]) |
|
| 2319 |
+ if err != nil {
|
|
| 2320 |
+ job.Error(err) |
|
| 2321 |
+ return engine.StatusErr |
|
| 2322 |
+ } |
|
| 2323 |
+ b, err := json.Marshal(image) |
|
| 2324 |
+ if err != nil {
|
|
| 2325 |
+ job.Error(err) |
|
| 2326 |
+ return engine.StatusErr |
|
| 2327 |
+ } |
|
| 2328 |
+ job.Stdout.Write(b) |
|
| 2329 |
+ return engine.StatusOK |
|
| 2330 |
+} |
|
| 2331 |
+ |
|
| 2313 | 2332 |
func (srv *Server) ContainerCopy(job *engine.Job) engine.Status {
|
| 2314 | 2333 |
if len(job.Args) != 2 {
|
| 2315 | 2334 |
job.Errorf("Usage: %s CONTAINER RESOURCE\n", job.Name)
|