builtins.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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("initserver", server.InitServer); err != nil {
  49. return err
  50. }
  51. return eng.Register("init_networkdriver", bridge.InitDriver)
  52. }
  53. // builtins jobs independent of any subsystem
  54. func dockerVersion(job *engine.Job) engine.Status {
  55. v := &engine.Env{}
  56. v.Set("Version", dockerversion.VERSION)
  57. v.SetJson("ApiVersion", api.APIVERSION)
  58. v.Set("GitCommit", dockerversion.GITCOMMIT)
  59. v.Set("GoVersion", runtime.Version())
  60. v.Set("Os", runtime.GOOS)
  61. v.Set("Arch", runtime.GOARCH)
  62. if kernelVersion, err := utils.GetKernelVersion(); err == nil {
  63. v.Set("KernelVersion", kernelVersion.String())
  64. }
  65. if _, err := v.WriteTo(job.Stdout); err != nil {
  66. return job.Error(err)
  67. }
  68. return engine.StatusOK
  69. }