Restore systemd support for docker versions <1.12

Signed-off-by: Peter Rifel <pgrifel@gmail.com>
This commit is contained in:
Peter Rifel
2017-02-22 15:06:28 -08:00
parent 08d08678aa
commit 12d2c1e842
2 changed files with 40 additions and 1 deletions

View File

@@ -7,6 +7,7 @@ import (
"github.com/docker/machine/libmachine/drivers"
"github.com/docker/machine/libmachine/provision/serviceaction"
"github.com/docker/machine/libmachine/versioncmp"
)
type SystemdProvisioner struct {
@@ -40,9 +41,19 @@ func (p *SystemdProvisioner) GenerateDockerOptions(dockerPort int) (*DockerOptio
driverNameLabel := fmt.Sprintf("provider=%s", p.Driver.DriverName())
p.EngineOptions.Labels = append(p.EngineOptions.Labels, driverNameLabel)
dockerVersion, err := DockerClientVersion(p)
if err != nil {
return nil, err
}
arg := "dockerd"
if versioncmp.LessThan(dockerVersion, "1.12.0") {
arg = "docker daemon"
}
engineConfigTmpl := `[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:{{.DockerPort}} -H unix:///var/run/docker.sock --storage-driver {{.EngineOptions.StorageDriver}} --tlsverify --tlscacert {{.AuthOptions.CaCertRemotePath}} --tlscert {{.AuthOptions.ServerCertRemotePath}} --tlskey {{.AuthOptions.ServerKeyRemotePath}} {{ range .EngineOptions.Labels }}--label {{.}} {{ end }}{{ range .EngineOptions.InsecureRegistry }}--insecure-registry {{.}} {{ end }}{{ range .EngineOptions.RegistryMirror }}--registry-mirror {{.}} {{ end }}{{ range .EngineOptions.ArbitraryFlags }}--{{.}} {{ end }}
ExecStart=/usr/bin/` + arg + ` -H tcp://0.0.0.0:{{.DockerPort}} -H unix:///var/run/docker.sock --storage-driver {{.EngineOptions.StorageDriver}} --tlsverify --tlscacert {{.AuthOptions.CaCertRemotePath}} --tlscert {{.AuthOptions.ServerCertRemotePath}} --tlskey {{.AuthOptions.ServerKeyRemotePath}} {{ range .EngineOptions.Labels }}--label {{.}} {{ end }}{{ range .EngineOptions.InsecureRegistry }}--insecure-registry {{.}} {{ end }}{{ range .EngineOptions.RegistryMirror }}--registry-mirror {{.}} {{ end }}{{ range .EngineOptions.ArbitraryFlags }}--{{.}} {{ end }}
Environment={{range .EngineOptions.Env}}{{ printf "%q" . }} {{end}}
`
t, err := template.New("engineConfig").Parse(engineConfigTmpl)

View File

@@ -146,6 +146,34 @@ func TestMachineCustomPortBoot2Docker(t *testing.T) {
}
}
func TestUbuntuSystemdDaemonBinary(t *testing.T) {
p := NewUbuntuSystemdProvisioner(&fakedriver.Driver{}).(*UbuntuSystemdProvisioner)
cases := []struct {
output, want string
}{
{"Docker version 1.9.1\n", "docker daemon"},
{"Docker version 1.11.2\n", "docker daemon"},
{"Docker version 1.12.0\n", "dockerd"},
{"Docker version 1.13.0\n", "dockerd"},
}
sshCmder := &provisiontest.FakeSSHCommander{
Responses: make(map[string]string),
}
p.SSHCommander = sshCmder
for _, tc := range cases {
sshCmder.Responses["docker --version"] = tc.output
opts, err := p.GenerateDockerOptions(1234)
if err != nil {
t.Fatal(err)
}
if !strings.Contains(opts.EngineOptions, tc.want) {
t.Fatal("incorrect docker daemon binary in engine options")
}
}
}
type fakeProvisioner struct {
GenericProvisioner
}