github.com/ncdc/docker@v0.10.1-0.20160129113957-6c6729ef5b74/volume/drivers/adapter.go (about) 1 package volumedrivers 2 3 import ( 4 "github.com/docker/docker/pkg/plugins" 5 "github.com/docker/docker/volume" 6 ) 7 8 type volumeDriverAdapter struct { 9 name string 10 proxy *volumeDriverProxy 11 } 12 13 func (a *volumeDriverAdapter) Name() string { 14 return a.name 15 } 16 17 func (a *volumeDriverAdapter) Create(name string, opts map[string]string) (volume.Volume, error) { 18 err := a.proxy.Create(name, opts) 19 if err != nil { 20 return nil, err 21 } 22 return &volumeAdapter{ 23 proxy: a.proxy, 24 name: name, 25 driverName: a.name}, nil 26 } 27 28 func (a *volumeDriverAdapter) Remove(v volume.Volume) error { 29 return a.proxy.Remove(v.Name()) 30 } 31 32 func (a *volumeDriverAdapter) List() ([]volume.Volume, error) { 33 ls, err := a.proxy.List() 34 if err != nil { 35 return nil, err 36 } 37 38 var out []volume.Volume 39 for _, vp := range ls { 40 out = append(out, &volumeAdapter{ 41 proxy: a.proxy, 42 name: vp.Name, 43 driverName: a.name, 44 eMount: vp.Mountpoint, 45 }) 46 } 47 return out, nil 48 } 49 50 func (a *volumeDriverAdapter) Get(name string) (volume.Volume, error) { 51 v, err := a.proxy.Get(name) 52 if err != nil { 53 // TODO: remove this hack. Allows back compat with volume drivers that don't support this call 54 if !plugins.IsNotFound(err) { 55 return nil, err 56 } 57 return a.Create(name, nil) 58 } 59 60 return &volumeAdapter{ 61 proxy: a.proxy, 62 name: v.Name, 63 driverName: a.Name(), 64 eMount: v.Mountpoint, 65 }, nil 66 } 67 68 type volumeAdapter struct { 69 proxy *volumeDriverProxy 70 name string 71 driverName string 72 eMount string // ephemeral host volume path 73 } 74 75 type proxyVolume struct { 76 Name string 77 Mountpoint string 78 } 79 80 func (a *volumeAdapter) Name() string { 81 return a.name 82 } 83 84 func (a *volumeAdapter) DriverName() string { 85 return a.driverName 86 } 87 88 func (a *volumeAdapter) Path() string { 89 if len(a.eMount) > 0 { 90 return a.eMount 91 } 92 m, _ := a.proxy.Path(a.name) 93 return m 94 } 95 96 func (a *volumeAdapter) Mount() (string, error) { 97 var err error 98 a.eMount, err = a.proxy.Mount(a.name) 99 return a.eMount, err 100 } 101 102 func (a *volumeAdapter) Unmount() error { 103 return a.proxy.Unmount(a.name) 104 }