Skip to content

Commit be31dec

Browse files
committed
use docker pkg/sockets package to create net.Listeners
1 parent e5087b1 commit be31dec

File tree

4 files changed

+101
-37
lines changed

4 files changed

+101
-37
lines changed

api.go

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ package dkvolume
33
import (
44
"encoding/json"
55
"fmt"
6-
"io/ioutil"
76
"net"
87
"net/http"
98
"os"
10-
"path/filepath"
119
)
1210

1311
const (
@@ -16,8 +14,6 @@ const (
1614

1715
defaultContentTypeV1_1 = "application/vnd.docker.plugins.v1.1+json"
1816
defaultImplementationManifest = `{"Implements": ["VolumeDriver"]}`
19-
pluginSpecDir = "/etc/docker/plugins"
20-
pluginSockDir = "/run/docker/plugins"
2117

2218
activatePath = "/Plugin.Activate"
2319
createPath = "/VolumeDriver.Create"
@@ -130,15 +126,9 @@ func (h *Handler) listenAndServe(proto, addr, group string) error {
130126

131127
switch proto {
132128
case "tcp":
133-
l, err = newTCPSocket(addr, nil, start)
134-
if err == nil {
135-
spec, err = writeSpec(group, l.Addr().String())
136-
}
129+
l, err = newTCPListener(group, addr, start)
137130
case "unix":
138-
spec, err = fullSocketAddr(addr)
139-
if err == nil {
140-
l, err = newUnixSocket(spec, group, start)
141-
}
131+
l, spec, err = newUnixListener(addr, group, start)
142132
}
143133

144134
if spec != "" {
@@ -166,28 +156,3 @@ func encodeResponse(w http.ResponseWriter, res Response) {
166156
}
167157
json.NewEncoder(w).Encode(res)
168158
}
169-
170-
func writeSpec(name, addr string) (string, error) {
171-
if err := os.MkdirAll(pluginSpecDir, 0755); err != nil {
172-
return "", err
173-
}
174-
175-
spec := filepath.Join(pluginSpecDir, name+".spec")
176-
url := "tcp://" + addr
177-
if err := ioutil.WriteFile(spec, []byte(url), 0644); err != nil {
178-
return "", err
179-
}
180-
return spec, nil
181-
}
182-
183-
func fullSocketAddr(addr string) (string, error) {
184-
if err := os.MkdirAll(pluginSockDir, 0755); err != nil {
185-
return "", err
186-
}
187-
188-
if filepath.IsAbs(addr) {
189-
return addr, nil
190-
}
191-
192-
return filepath.Join(pluginSockDir, addr+".sock"), nil
193-
}

tcp_listener.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package dkvolume
2+
3+
import (
4+
"io/ioutil"
5+
"net"
6+
"os"
7+
"path/filepath"
8+
9+
"github.com/docker/docker/pkg/sockets"
10+
)
11+
12+
const (
13+
pluginSpecDir = "/etc/docker/plugins"
14+
)
15+
16+
func newTCPListener(
17+
volumeDriverName string,
18+
address string,
19+
start <-chan struct{},
20+
) (net.Listener, error) {
21+
listener, err := sockets.NewTCPSocket(address, nil, start)
22+
if err != nil {
23+
return nil, err
24+
}
25+
if err := writeSpec(volumeDriverName, listener.Addr().String()); err != nil {
26+
return nil, err
27+
}
28+
return listener, nil
29+
}
30+
31+
func writeSpec(name string, address string) error {
32+
if err := os.MkdirAll(pluginSpecDir, 0755); err != nil {
33+
return err
34+
}
35+
spec := filepath.Join(pluginSpecDir, name+".spec")
36+
url := "tcp://" + address
37+
return ioutil.WriteFile(spec, []byte(url), 0644)
38+
}

unix_listener.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// +build linux freebsd
2+
3+
package dkvolume
4+
5+
import (
6+
"net"
7+
"os"
8+
"path/filepath"
9+
10+
"github.com/docker/docker/pkg/sockets"
11+
)
12+
13+
const (
14+
pluginSockDir = "/run/docker/plugins"
15+
)
16+
17+
func newUnixListener(
18+
volumeDriverName string,
19+
group string,
20+
start <-chan struct{},
21+
) (net.Listener, string, error) {
22+
path, err := fullSocketAddress(volumeDriverName)
23+
if err != nil {
24+
return nil, "", err
25+
}
26+
listener, err := sockets.NewUnixSocket(path, group, start)
27+
if err != nil {
28+
return nil, "", err
29+
}
30+
return listener, path, nil
31+
}
32+
33+
func fullSocketAddress(address string) (string, error) {
34+
if err := os.MkdirAll(pluginSockDir, 0755); err != nil {
35+
return "", err
36+
}
37+
if filepath.IsAbs(address) {
38+
return address, nil
39+
}
40+
return filepath.Join(pluginSockDir, address+".sock"), nil
41+
}

unix_listener_unsupported.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// +build !linux,!freebsd
2+
3+
package dkvolume
4+
5+
import (
6+
"errors"
7+
"net"
8+
)
9+
10+
var (
11+
errOnlySupportedOnLinuxAndFreeBSD = errors.New("unix socket creation is only supported on linux and freebsd")
12+
)
13+
14+
func newUnixListener(
15+
volumeDriverName string,
16+
group string,
17+
start <-chan struct{},
18+
) (net.Listener, string, error) {
19+
return nil, "", errOnlySupportedOnLinuxAndFreeBSD
20+
}

0 commit comments

Comments
 (0)