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  }