diff --git a/cmd/control/docker.go b/cmd/control/engine.go similarity index 81% rename from cmd/control/docker.go rename to cmd/control/engine.go index c909fd86..3fa22d25 100644 --- a/cmd/control/docker.go +++ b/cmd/control/engine.go @@ -2,7 +2,9 @@ package control import ( "fmt" + "io/ioutil" "sort" + "strings" "golang.org/x/net/context" @@ -15,6 +17,10 @@ import ( "github.com/rancher/os/util/network" ) +const ( + dockerDone = "/run/docker-done" +) + func engineSubcommands() []cli.Command { return []cli.Command{ { @@ -107,9 +113,27 @@ func engineList(c *cli.Context) error { } sort.Strings(engines) + currentEngine := currentEngine() + for _, engine := range engines { - fmt.Println(engine) + if engine == currentEngine { + fmt.Printf("current %s\n", engine) + } else if engine == cfg.Rancher.Docker.Engine { + fmt.Printf("enabled %s\n", engine) + } else { + fmt.Printf("disabled %s\n", engine) + } } return nil } + +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) + } + return +} diff --git a/cmd/dockerinit/main.go b/cmd/dockerinit/main.go index dec48017..aad7814a 100644 --- a/cmd/dockerinit/main.go +++ b/cmd/dockerinit/main.go @@ -10,12 +10,14 @@ import ( "time" log "github.com/Sirupsen/logrus" + "github.com/rancher/os/config" "github.com/rancher/os/util" ) const ( consoleDone = "/run/console-done" dockerConf = "/var/lib/rancher/conf/docker" + dockerDone = "/run/docker-done" dockerLog = "/var/log/docker.log" ) @@ -80,6 +82,12 @@ func Main() { args = append(args, os.Getenv("DOCKER_OPTS")) } + cfg := config.LoadConfig() + + if err := ioutil.WriteFile(dockerDone, []byte(cfg.Rancher.Docker.Engine), 0644); err != nil { + log.Error(err) + } + log.Fatal(syscall.Exec("/usr/bin/dockerlaunch", args, os.Environ())) } diff --git a/compose/reload.go b/compose/reload.go index e0c95f4e..8163d4f4 100644 --- a/compose/reload.go +++ b/compose/reload.go @@ -68,7 +68,7 @@ func projectReload(p *project.Project, useNetwork *bool, loadConsole bool, envir } } - if cfg.Rancher.Docker.Engine != "" { + if cfg.Rancher.Docker.Engine != "" && cfg.Rancher.Docker.Engine != cfg.Rancher.Defaults.Docker.Engine { p.ServiceConfigs.Add("docker", &composeConfig.ServiceConfig{}) if err := LoadService(p, cfg, *useNetwork, cfg.Rancher.Docker.Engine); err != nil && err != network.ErrNoNetwork { log.Error(err) diff --git a/config/types.go b/config/types.go index 5c3018bd..4ab073f5 100644 --- a/config/types.go +++ b/config/types.go @@ -172,6 +172,7 @@ type CloudInit struct { type Defaults struct { Hostname string `yaml:"hostname,omitempty"` + Docker DockerConfig `yaml:"docker,omitempty"` Network netconf.NetworkConfig `yaml:"network,omitempty"` } diff --git a/os-config.tpl.yml b/os-config.tpl.yml index 1c589277..8bb4b739 100644 --- a/os-config.tpl.yml +++ b/os-config.tpl.yml @@ -4,6 +4,8 @@ rancher: SUFFIX: {{.SUFFIX}} defaults: hostname: {{.HOSTNAME_DEFAULT}} + docker: + engine: docker-1.11.2 network: dns: nameservers: [8.8.8.8, 8.8.4.4] @@ -382,6 +384,7 @@ rancher: url: {{.OS_RELEASES_YML}}/releases{{.SUFFIX}}.yml image: {{.OS_REPO}}/os docker: + engine: docker-1.11.2 tls_args: [--tlsverify, --tlscacert=/etc/docker/tls/ca.pem, --tlscert=/etc/docker/tls/server-cert.pem, --tlskey=/etc/docker/tls/server-key.pem, '-H=0.0.0.0:2376'] args: [daemon, --log-opt, max-size=25m, --log-opt, max-file=2, -s, overlay, -G, docker, -H, 'unix:///var/run/docker.sock'] diff --git a/tests/custom_docker_test.go b/tests/custom_docker_test.go index 7fd1cd1d..e4a68c70 100644 --- a/tests/custom_docker_test.go +++ b/tests/custom_docker_test.go @@ -10,6 +10,8 @@ func (s *QemuSuite) TestCustomDocker(c *C) { set -ex docker version | grep 1.10.3 + +sudo ros engine list | grep 1.10.3 | grep current docker run -d --restart=always nginx docker ps | grep nginx`) @@ -19,6 +21,7 @@ set -ex sudo ros engine switch docker-1.11.2 /usr/sbin/wait-for-docker docker version | grep 1.11.2 +sudo ros engine list | grep 1.11.2 | grep current docker ps | grep nginx`) s.Reboot(c) @@ -27,6 +30,7 @@ docker ps | grep nginx`) set -ex docker version | grep 1.11.2 +sudo ros engine list | grep 1.11.2 | grep current docker ps | grep nginx`) } @@ -39,6 +43,7 @@ set -ex apt-get --version docker version | grep 1.10.3 +sudo ros engine list | grep 1.10.3 | grep current docker run -d --restart=always nginx docker ps | grep nginx`) @@ -48,6 +53,7 @@ set -ex sudo ros engine switch docker-1.11.2 /usr/sbin/wait-for-docker docker version | grep 1.11.2 +sudo ros engine list | grep 1.11.2 | grep current docker ps | grep nginx`) s.Reboot(c) @@ -56,5 +62,6 @@ docker ps | grep nginx`) set -ex docker version | grep 1.11.2 +sudo ros engine list | grep 1.11.2 | grep current docker ps | grep nginx`) }