add ID and Hostname in docker info

Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
Victor Vieux 2014-11-17 19:23:41 +00:00
parent 34cb92e2d4
commit 9a85f60c75
6 changed files with 46 additions and 0 deletions

View File

@ -505,6 +505,12 @@ func (cli *DockerCli) CmdInfo(args ...string) error {
if remoteInfo.Exists("MemTotal") { if remoteInfo.Exists("MemTotal") {
fmt.Fprintf(cli.out, "Total Memory: %s\n", units.BytesSize(float64(remoteInfo.GetInt64("MemTotal")))) fmt.Fprintf(cli.out, "Total Memory: %s\n", units.BytesSize(float64(remoteInfo.GetInt64("MemTotal"))))
} }
if remoteInfo.Exists("Hostname") {
fmt.Fprintf(cli.out, "Hostname: %s\n", remoteInfo.Get("Hostname"))
}
if remoteInfo.Exists("ID") {
fmt.Fprintf(cli.out, "ID: %s\n", remoteInfo.Get("ID"))
}
if remoteInfo.GetBool("Debug") || os.Getenv("DEBUG") != "" { if remoteInfo.GetBool("Debug") || os.Getenv("DEBUG") != "" {
if remoteInfo.Exists("Debug") { if remoteInfo.Exists("Debug") {

View File

@ -3,12 +3,15 @@ package api
import ( import (
"fmt" "fmt"
"mime" "mime"
"os"
"path"
"strings" "strings"
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
"github.com/docker/docker/engine" "github.com/docker/docker/engine"
"github.com/docker/docker/pkg/parsers" "github.com/docker/docker/pkg/parsers"
"github.com/docker/docker/pkg/version" "github.com/docker/docker/pkg/version"
"github.com/docker/docker/vendor/src/github.com/docker/libtrust"
) )
const ( const (
@ -47,3 +50,25 @@ func MatchesContentType(contentType, expectedType string) bool {
} }
return err == nil && mimetype == expectedType return err == nil && mimetype == expectedType
} }
// LoadOrCreateTrustKey attempts to load the libtrust key at the given path,
// otherwise generates a new one
func LoadOrCreateTrustKey(trustKeyPath string) (libtrust.PrivateKey, error) {
err := os.MkdirAll(path.Dir(trustKeyPath), 0700)
if err != nil {
return nil, err
}
trustKey, err := libtrust.LoadKeyFile(trustKeyPath)
if err == libtrust.ErrKeyFileDoesNotExist {
trustKey, err = libtrust.GenerateECP256PrivateKey()
if err != nil {
return nil, fmt.Errorf("Error generating key: %s", err)
}
if err := libtrust.SaveKey(trustKeyPath, trustKey); err != nil {
return nil, fmt.Errorf("Error saving key file: %s", err)
}
} else if err != nil {
log.Fatalf("Error loading key file: %s", err)
}
return trustKey, nil
}

View File

@ -40,6 +40,7 @@ type Config struct {
DisableNetwork bool DisableNetwork bool
EnableSelinuxSupport bool EnableSelinuxSupport bool
Context map[string][]string Context map[string][]string
TrustKeyPath string
} }
// InstallFlags adds command-line options to the top-level flag parser for // InstallFlags adds command-line options to the top-level flag parser for

View File

@ -15,6 +15,7 @@ import (
"github.com/docker/libcontainer/label" "github.com/docker/libcontainer/label"
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
"github.com/docker/docker/api"
"github.com/docker/docker/daemon/execdriver" "github.com/docker/docker/daemon/execdriver"
"github.com/docker/docker/daemon/execdriver/execdrivers" "github.com/docker/docker/daemon/execdriver/execdrivers"
"github.com/docker/docker/daemon/execdriver/lxc" "github.com/docker/docker/daemon/execdriver/lxc"
@ -83,6 +84,7 @@ func (c *contStore) List() []*Container {
} }
type Daemon struct { type Daemon struct {
ID string
repository string repository string
sysInitPath string sysInitPath string
containers *contStore containers *contStore
@ -893,7 +895,13 @@ func NewDaemonFromDirectory(config *Config, eng *engine.Engine) (*Daemon, error)
return nil, err return nil, err
} }
trustKey, err := api.LoadOrCreateTrustKey(config.TrustKeyPath)
if err != nil {
return nil, err
}
daemon := &Daemon{ daemon := &Daemon{
ID: trustKey.PublicKey().KeyID(),
repository: daemonRepo, repository: daemonRepo,
containers: &contStore{s: make(map[string]*Container)}, containers: &contStore{s: make(map[string]*Container)},
execCommands: newExecStore(), execCommands: newExecStore(),

View File

@ -56,6 +56,7 @@ func (daemon *Daemon) CmdInfo(job *engine.Job) engine.Status {
return job.Error(err) return job.Error(err)
} }
v := &engine.Env{} v := &engine.Env{}
v.Set("ID", daemon.ID)
v.SetInt("Containers", len(daemon.List())) v.SetInt("Containers", len(daemon.List()))
v.SetInt("Images", imgcount) v.SetInt("Images", imgcount)
v.Set("Driver", daemon.GraphDriver().String()) v.Set("Driver", daemon.GraphDriver().String())
@ -75,6 +76,9 @@ func (daemon *Daemon) CmdInfo(job *engine.Job) engine.Status {
v.Set("InitPath", initPath) v.Set("InitPath", initPath)
v.SetInt("NCPU", runtime.NumCPU()) v.SetInt("NCPU", runtime.NumCPU())
v.SetInt64("MemTotal", meminfo.MemTotal) v.SetInt64("MemTotal", meminfo.MemTotal)
if hostname, err := os.Hostname(); err == nil {
v.Set("Hostname", hostname)
}
if _, err := v.WriteTo(job.Stdout); err != nil { if _, err := v.WriteTo(job.Stdout); err != nil {
return job.Error(err) return job.Error(err)
} }

View File

@ -34,6 +34,8 @@ func mainDaemon() {
eng := engine.New() eng := engine.New()
signal.Trap(eng.Shutdown) signal.Trap(eng.Shutdown)
daemonCfg.TrustKeyPath = *flTrustKey
// Load builtins // Load builtins
if err := builtins.Register(eng); err != nil { if err := builtins.Register(eng); err != nil {
log.Fatal(err) log.Fatal(err)