Browse code

move inspect to 2 jobs

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)

Victor Vieux authored on 2014/01/16 10:09:05
Showing 3 changed files
... ...
@@ -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 {
... ...
@@ -67,10 +67,6 @@ type (
67 67
 		Resource string
68 68
 		HostPath string
69 69
 	}
70
-	APIContainer struct {
71
-		*Container
72
-		HostConfig *HostConfig
73
-	}
74 70
 )
75 71
 
76 72
 func (api APIContainers) ToLegacy() *APIContainersOld {
... ...
@@ -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)