Restore systemd support for docker versions <1.12
Signed-off-by: Peter Rifel <pgrifel@gmail.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user