builtins.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package builtins
  2. import (
  3. "runtime"
  4. "github.com/dotcloud/docker/api"
  5. apiserver "github.com/dotcloud/docker/api/server"
  6. "github.com/dotcloud/docker/daemon/networkdriver/bridge"
  7. "github.com/dotcloud/docker/dockerversion"
  8. "github.com/dotcloud/docker/engine"
  9. "github.com/dotcloud/docker/registry"
  10. "github.com/dotcloud/docker/server"
  11. "github.com/dotcloud/docker/utils"
  12. )
  13. func Register(eng *engine.Engine) error {
  14. if err := daemon(eng); err != nil {
  15. return err
  16. }
  17. if err := remote(eng); err != nil {
  18. return err
  19. }
  20. if err := eng.Register("version", dockerVersion); err != nil {
  21. return err
  22. }
  23. return registry.NewService().Install(eng)
  24. }
  25. // remote: a RESTful api for cross-docker communication
  26. func remote(eng *engine.Engine) error {
  27. if err := eng.Register("serveapi", apiserver.ServeApi); err != nil {
  28. return err
  29. }
  30. return eng.Register("acceptconnections", apiserver.AcceptConnections)
  31. }
  32. // daemon: a default execution and storage backend for Docker on Linux,
  33. // with the following underlying components:
  34. //
  35. // * Pluggable storage drivers including aufs, vfs, lvm and btrfs.
  36. // * Pluggable execution drivers including lxc and chroot.
  37. //
  38. // In practice `daemon` still includes most core Docker components, including:
  39. //
  40. // * The reference registry client implementation
  41. // * Image management
  42. // * The build facility
  43. // * Logging
  44. //
  45. // These components should be broken off into plugins of their own.
  46. //
  47. func daemon(eng *engine.Engine) error {
  48. if err := eng.Register("initserverpidfile", server.InitPidfile); err != nil {
  49. return err
  50. }
  51. if err := eng.Register("initserver", server.InitServer); err != nil {
  52. return err
  53. }
  54. return eng.Register("init_networkdriver", bridge.InitDriver)
  55. }
  56. // builtins jobs independent of any subsystem
  57. func dockerVersion(job *engine.Job) engine.Status {
  58. v := &engine.Env{}
  59. v.SetJson("Version", dockerversion.VERSION)
  60. v.SetJson("ApiVersion", api.APIVERSION)
  61. v.Set("GitCommit", dockerversion.GITCOMMIT)
  62. v.Set("GoVersion", runtime.Version())
  63. v.Set("Os", runtime.GOOS)
  64. v.Set("Arch", runtime.GOARCH)
  65. if kernelVersion, err := utils.GetKernelVersion(); err == nil {
  66. v.Set("KernelVersion", kernelVersion.String())
  67. }
  68. if _, err := v.WriteTo(job.Stdout); err != nil {
  69. return job.Error(err)
  70. }
  71. return engine.StatusOK
  72. }