@@ -2,6 +2,7 @@ package main
2
2
3
3
import (
4
4
"os"
5
+ "os/exec"
5
6
6
7
"github.com/alexflint/go-arg"
7
8
"github.com/rs/zerolog"
@@ -11,11 +12,8 @@ import (
11
12
v "github.com/docker/go-plugins-helpers/volume"
12
13
)
13
14
14
- const (
15
- socketAddress = "/run/docker/plugins/docker-volume-loopback.sock"
16
- )
17
-
18
15
type config struct {
16
+ Socket string `arg:"--socket,env:SOCKET,help:path to the plugin UNIX socket under /run/docker/plugins/"`
19
17
StateDir string `arg:"--state-dir,env:STATE_DIR,help:dir used to keep track of currently mounted volumes"`
20
18
DataDir string `arg:"--data-dir,env:DATA_DIR,help:dir used to store actual volume data"`
21
19
MountDir string `arg:"--mount-dir,env:MOUNT_DIR,help:dir used to create mount-points"`
@@ -26,6 +24,7 @@ type config struct {
26
24
var (
27
25
logger = zerolog .New (os .Stdout )
28
26
args = & config {
27
+ Socket : "/run/docker/plugins/docker-volume-loopback.sock" ,
29
28
StateDir : "/run/docker-volume-loopback" ,
30
29
DataDir : "/var/lib/docker-volume-loopback" ,
31
30
MountDir : "/mnt" ,
@@ -37,16 +36,35 @@ var (
37
36
func main () {
38
37
arg .MustParse (args )
39
38
39
+ if args .Debug {
40
+ zerolog .SetGlobalLevel (zerolog .DebugLevel )
41
+ }
42
+
40
43
logger .Info ().
41
- Str ("socket-address" , socketAddress ).
44
+ Str ("socket-address" , args . Socket ).
42
45
Interface ("args" , args ).
43
46
Msg ("initializing plugin" )
44
47
45
- if args .Debug {
46
- zerolog .SetGlobalLevel (zerolog .DebugLevel )
48
+ _ , errXfs := exec .LookPath ("mkfs.xfs" )
49
+ if errXfs != nil {
50
+ logger .Warn ().
51
+ Err (errXfs ).
52
+ Msg ("mkfs.xfs is not available, please install 'xfsprogs' to be able to use xfs filesystem" )
53
+ }
54
+
55
+ _ , errExt4 := exec .LookPath ("mkfs.ext4" )
56
+ if errExt4 != nil {
57
+ logger .Warn ().
58
+ Err (errExt4 ).
59
+ Msg ("mkfs.ext4 is not available, please install 'e2fsprogs' to be able to use ext4 filesystem" )
60
+ }
61
+ if errXfs != nil && errExt4 != nil {
62
+ logger .Fatal ().
63
+ Msg ("Neither of supported filesystems (xfs, ext4) are available" )
64
+ os .Exit (1 )
47
65
}
48
66
49
- d , err := driver .NewDriver (driver.Config {
67
+ driverInstance , err := driver .NewDriver (driver.Config {
50
68
StateDir : args .StateDir ,
51
69
DataDir : args .DataDir ,
52
70
MountDir : args .MountDir ,
@@ -55,16 +73,16 @@ func main() {
55
73
if err != nil {
56
74
logger .Fatal ().
57
75
Err (err ).
58
- Msg ("failed to initialize loopback volume driver" )
76
+ Msg ("failed to initialize 'docker- volume-loopback' driver" )
59
77
os .Exit (1 )
60
78
}
61
79
62
- h := v .NewHandler (d )
63
- err = h .ServeUnix (socketAddress , 0 )
80
+ handler := v .NewHandler (driverInstance )
81
+ err = handler .ServeUnix (args . Socket , 0 )
64
82
if err != nil {
65
83
logger .Fatal ().
66
84
Err (err ).
67
- Str ("socket-address" , socketAddress ).
85
+ Str ("socket-address" , args . Socket ).
68
86
Msg ("failed to server volume plugin api over unix socket" )
69
87
os .Exit (1 )
70
88
}
0 commit comments