service.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package graph
  2. import (
  3. "fmt"
  4. "io"
  5. "github.com/Sirupsen/logrus"
  6. "github.com/docker/docker/engine"
  7. )
  8. func (s *TagStore) Install(eng *engine.Engine) error {
  9. for name, handler := range map[string]engine.Handler{
  10. "image_inspect": s.CmdLookup,
  11. "image_export": s.CmdImageExport,
  12. "viz": s.CmdViz,
  13. } {
  14. if err := eng.Register(name, handler); err != nil {
  15. return fmt.Errorf("Could not register %q: %v", name, err)
  16. }
  17. }
  18. return nil
  19. }
  20. // CmdLookup return an image encoded in JSON
  21. func (s *TagStore) CmdLookup(job *engine.Job) error {
  22. if len(job.Args) != 1 {
  23. return fmt.Errorf("usage: %s NAME", job.Name)
  24. }
  25. name := job.Args[0]
  26. if image, err := s.LookupImage(name); err == nil && image != nil {
  27. if job.GetenvBool("raw") {
  28. b, err := image.RawJson()
  29. if err != nil {
  30. return err
  31. }
  32. job.Stdout.Write(b)
  33. return nil
  34. }
  35. out := &engine.Env{}
  36. out.SetJson("Id", image.ID)
  37. out.SetJson("Parent", image.Parent)
  38. out.SetJson("Comment", image.Comment)
  39. out.SetAuto("Created", image.Created)
  40. out.SetJson("Container", image.Container)
  41. out.SetJson("ContainerConfig", image.ContainerConfig)
  42. out.Set("DockerVersion", image.DockerVersion)
  43. out.SetJson("Author", image.Author)
  44. out.SetJson("Config", image.Config)
  45. out.Set("Architecture", image.Architecture)
  46. out.Set("Os", image.OS)
  47. out.SetInt64("Size", image.Size)
  48. out.SetInt64("VirtualSize", image.GetParentsSize(0)+image.Size)
  49. if _, err = out.WriteTo(job.Stdout); err != nil {
  50. return err
  51. }
  52. return nil
  53. }
  54. return fmt.Errorf("No such image: %s", name)
  55. }
  56. // ImageTarLayer return the tarLayer of the image
  57. func (s *TagStore) ImageTarLayer(name string, dest io.Writer) error {
  58. if image, err := s.LookupImage(name); err == nil && image != nil {
  59. fs, err := image.TarLayer()
  60. if err != nil {
  61. return err
  62. }
  63. defer fs.Close()
  64. written, err := io.Copy(dest, fs)
  65. if err != nil {
  66. return err
  67. }
  68. logrus.Debugf("rendered layer for %s of [%d] size", image.ID, written)
  69. return nil
  70. }
  71. return fmt.Errorf("No such image: %s", name)
  72. }