package builtins import ( "runtime" "github.com/dotcloud/docker/api" apiserver "github.com/dotcloud/docker/api/server" "github.com/dotcloud/docker/daemon/networkdriver/bridge" "github.com/dotcloud/docker/dockerversion" "github.com/dotcloud/docker/engine" "github.com/dotcloud/docker/registry" "github.com/dotcloud/docker/server" "github.com/dotcloud/docker/utils" ) func Register(eng *engine.Engine) error { if err := daemon(eng); err != nil { return err } if err := remote(eng); err != nil { return err } if err := eng.Register("version", dockerVersion); err != nil { return err } return registry.NewService().Install(eng) } // remote: a RESTful api for cross-docker communication func remote(eng *engine.Engine) error { if err := eng.Register("serveapi", apiserver.ServeApi); err != nil { return err } return eng.Register("acceptconnections", apiserver.AcceptConnections) } // daemon: a default execution and storage backend for Docker on Linux, // with the following underlying components: // // * Pluggable storage drivers including aufs, vfs, lvm and btrfs. // * Pluggable execution drivers including lxc and chroot. // // In practice `daemon` still includes most core Docker components, including: // // * The reference registry client implementation // * Image management // * The build facility // * Logging // // These components should be broken off into plugins of their own. // func daemon(eng *engine.Engine) error { if err := eng.Register("initserver", server.InitServer); err != nil { return err } return eng.Register("init_networkdriver", bridge.InitDriver) } // builtins jobs independent of any subsystem func dockerVersion(job *engine.Job) engine.Status { v := &engine.Env{} v.SetJson("Version", dockerversion.VERSION) v.SetJson("ApiVersion", api.APIVERSION) v.Set("GitCommit", dockerversion.GITCOMMIT) v.Set("GoVersion", runtime.Version()) v.Set("Os", runtime.GOOS) v.Set("Arch", runtime.GOARCH) if kernelVersion, err := utils.GetKernelVersion(); err == nil { v.Set("KernelVersion", kernelVersion.String()) } if _, err := v.WriteTo(job.Stdout); err != nil { return job.Error(err) } return engine.StatusOK }