/
driver.go
51 lines (44 loc) · 1.53 KB
/
driver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package driver
import (
"fmt"
"github.com/sapk/docker-volume-helpers/basic"
"github.com/sapk/docker-volume-helpers/driver"
"github.com/docker/go-plugins-helpers/volume"
"github.com/sirupsen/logrus"
)
var (
//MountTimeout timeout before killing a mount try in seconds
MountTimeout = 30
//CfgVersion current config version compat
CfgVersion = 2
//CfgFolder config folder
CfgFolder = "/etc/docker-volumes/gluster/"
)
//GlusterDriver docker volume plugin driver extension of basic plugin
type GlusterDriver = basic.Driver
//Init start all needed deps and serve response to API call
func Init(root string, mountUniqName bool) *GlusterDriver {
logrus.Debugf("Init gluster driver at %s, UniqName: %v", root, mountUniqName)
config := basic.DriverConfig{
Version: CfgVersion,
Root: root,
Folder: CfgFolder,
CustomOptions: map[string]interface{}{
"mountUniqName": mountUniqName,
},
}
eventHandler := basic.DriverEventHandler{
OnMountVolume: mountVolume,
GetMountName: GetMountName,
}
return basic.Init(&config, &eventHandler)
}
func mountVolume(d *basic.Driver, v driver.Volume, m driver.Mount, r *volume.MountRequest) (*volume.MountResponse, error) {
cmd := fmt.Sprintf("glusterfs %s %s", parseVolURI(v.GetOptions()["voluri"]), m.GetPath())
//cmd := fmt.Sprintf("/usr/bin/mount -t glusterfs %s %s", v.VolumeURI, m.Path)
//TODO fuseOpts /usr/bin/mount -t glusterfs v.VolumeURI -o fuseOpts v.Mountpoint
if err := d.RunCmd(cmd); err != nil {
return nil, err
}
return &volume.MountResponse{Mountpoint: m.GetPath()}, nil
}