From a04c0f374014191d06fcef35f5d09a71bea00a0c Mon Sep 17 00:00:00 2001 From: Sven Dowideit Date: Fri, 14 Jul 2017 21:15:23 +1000 Subject: [PATCH] Fix ros engine list too Signed-off-by: Sven Dowideit --- cmd/control/docker_init.go | 6 ++---- cmd/control/engine.go | 38 ++++++++++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/cmd/control/docker_init.go b/cmd/control/docker_init.go index 1dd7fd34..ea630c7f 100644 --- a/cmd/control/docker_init.go +++ b/cmd/control/docker_init.go @@ -10,7 +10,6 @@ import ( "time" "github.com/codegangsta/cli" - "github.com/rancher/os/config" "github.com/rancher/os/log" "github.com/rancher/os/util" ) @@ -70,9 +69,8 @@ func dockerInitAction(c *cli.Context) error { fmt.Sprintf(`[ -e %s ] && source %s; exec /usr/bin/dockerlaunch %s %s $DOCKER_OPTS >> %s 2>&1`, dockerConf, dockerConf, dockerBin, strings.Join(c.Args(), " "), dockerLog), } - cfg := config.LoadConfig() - - if err := ioutil.WriteFile(dockerDone, []byte(cfg.Rancher.Docker.Engine), 0644); err != nil { + // TODO: this should be replaced by a "Docker ready event watcher" + if err := ioutil.WriteFile(dockerDone, []byte(CurrentEngine()), 0644); err != nil { log.Error(err) } diff --git a/cmd/control/engine.go b/cmd/control/engine.go index 4d161148..486b938c 100644 --- a/cmd/control/engine.go +++ b/cmd/control/engine.go @@ -2,17 +2,18 @@ package control import ( "fmt" - "io/ioutil" "sort" "strings" "golang.org/x/net/context" "github.com/codegangsta/cli" + "github.com/docker/docker/reference" "github.com/docker/libcompose/project/options" "github.com/rancher/os/cmd/control/service" "github.com/rancher/os/compose" "github.com/rancher/os/config" + "github.com/rancher/os/docker" "github.com/rancher/os/log" "github.com/rancher/os/util" "github.com/rancher/os/util/network" @@ -104,7 +105,7 @@ func engineEnable(c *cli.Context) error { func engineList(c *cli.Context) error { cfg := config.LoadConfig() engines := availableEngines(cfg) - currentEngine := currentEngine() + currentEngine := CurrentEngine() for _, engine := range engines { if engine == currentEngine { @@ -135,12 +136,33 @@ func availableEngines(cfg *config.CloudConfig) []string { return engines } -func currentEngine() (engine string) { - engineBytes, err := ioutil.ReadFile(dockerDone) - if err == nil { - engine = strings.TrimSpace(string(engineBytes)) - } else { - log.Warnf("Failed to detect current Docker engine: %v", err) +// CurrentEngine gets the name of the docker that's running +func CurrentEngine() (engine string) { + // sudo system-docker inspect --format "{{.Config.Image}}" docker + client, err := docker.NewSystemClient() + if err != nil { + log.Warnf("Failed to detect current docker: %v", err) + return } + info, err := client.ContainerInspect(context.Background(), "docker") + if err != nil { + log.Warnf("Failed to detect current docker: %v", err) + return + } + // parse image name, then remove os- prefix and the engine suffix + image, err := reference.ParseNamed(info.Config.Image) + if err != nil { + log.Warnf("Failed to detect current docker(%s): %v", info.Config.Image, err) + return + } + if t, ok := image.(reference.NamedTagged); ok { + tag := t.Tag() + if !strings.HasPrefix(tag, "1.") { + // TODO: this assumes we only do Docker ce :/ + tag = tag + "-ce" + } + return "docker-" + tag + } + return }