Skip to content

Commit

Permalink
Issue #19
Browse files Browse the repository at this point in the history
  • Loading branch information
gondor committed Mar 23, 2016
1 parent 3c8ca50 commit d130d84
Show file tree
Hide file tree
Showing 26 changed files with 1,161 additions and 17 deletions.
2 changes: 1 addition & 1 deletion .goxc.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"ArtifactsDest": "build",
"ConfigVersion": "0.9",
"PackageVersion": "0.11",
"PackageVersion": "0.12",
"TaskSettings": {
"bintray": {
"user": "gondor",
Expand Down
5 changes: 3 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
language: go
go:
- 1.4.2
- 1.5.1
- tip
script:
- go test ./...
- go build
install:
- go get github.com/stretchr/testify
- go get -v ./...
- go get -v ./...
env:
- GO15VENDOREXPERIMENT=1
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ FROM golang:1.5

COPY . /go/src/app
WORKDIR /go/src/app
RUN go-wrapper download && go-wrapper install && go build -o docker-volume-netshare
RUN go-wrapper download && go-wrapper install && go build -o docker-volume-netshare && cp docker-volume-netshare /bin
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ sudo mount -t nfs4 1.1.1.1:/mountpoint /target/mount

## Installation

**Latest Version:** 0.10
**Latest Version:** 0.12

#### From Source

Expand All @@ -29,9 +29,9 @@ $ go build

#### From Binaries

* Architecture i386 [ [linux](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_linux_386.tar.gz?direct) / [netbsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_netbsd_386.zip?direct) / [freebsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_freebsd_386.zip?direct) / [openbsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_openbsd_386.zip?direct) ]
* Architecture amd64 [ [linux](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_linux_amd64.tar.gz?direct) / [netbsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_netbsd_amd64.zip?direct) / [freebsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_freebsd_amd64.zip?direct) / [openbsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_openbsd_amd64.zip?direct) ]
* Debian Package [ [i386](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_i386.deb?direct) ] / [amd64](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_amd64.deb?direct) ] ]
* Architecture i386 [ [linux](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_linux_386.tar.gz?direct) / [netbsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_netbsd_386.zip?direct) / [freebsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_freebsd_386.zip?direct) / [openbsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_openbsd_386.zip?direct) ]
* Architecture amd64 [ [linux](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_linux_amd64.tar.gz?direct) / [netbsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_netbsd_amd64.zip?direct) / [freebsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_freebsd_amd64.zip?direct) / [openbsd](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_openbsd_amd64.zip?direct) ]
* Debian Package [ [i386](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_i386.deb?direct) ] / [amd64](https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_amd64.deb?direct) ] ]

#### On Ubuntu / Debian

Expand All @@ -40,8 +40,8 @@ The method below will install the sysvinit and /etc/default options that can be
1. Install the Package

```
$ wget https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.11_i386.deb
$ sudo dpkg -i docker-volume-netshare_0.11_i386.deb
$ wget https://dl.bintray.com//content/pacesys/docker/docker-volume-netshare_0.12_i386.deb
$ sudo dpkg -i docker-volume-netshare_0.12_i386.deb
```

2. Modify the startup options in `/etc/default/docker-volume-netshare`
Expand Down
8 changes: 7 additions & 1 deletion netshare/drivers/efs.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ func (e efsDriver) Mount(r volume.Request) volume.Response {
return volume.Response{Err: err.Error()}
}

if err := mountVolume(source, dest, 4); err != nil {
if err := e.mountVolume(source, dest); err != nil {
return volume.Response{Err: err.Error()}
}
e.mountm.Add(dest, r.Name)
Expand Down Expand Up @@ -157,3 +157,9 @@ func (e efsDriver) fixSource(name string) string {
func mountSuffix(uri string) string {
return uri + ":/"
}

func (e efsDriver) mountVolume(source, dest string) error {
cmd := fmt.Sprintf("mount -t nfs4 %s %s", source, dest)
log.Debugf("exec: %s\n", cmd)
return run(cmd)
}
53 changes: 48 additions & 5 deletions netshare/drivers/nfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,34 @@ import (
"sync"
)

const (
NfsOptions = "nfsopts"
DefaultNfsV3 = "port=2049,nolock,proto=tcp"
)

type nfsDriver struct {
root string
version int
mountm *mountManager
m *sync.Mutex
opts map[string]string
}

func NewNFSDriver(root string, version int) nfsDriver {
var (
EmptyMap = map[string]string{}
)


func NewNFSDriver(root string, version int, options string) nfsDriver {
d := nfsDriver{
root: root,
version: version,
mountm: NewVolumeManager(),
m: &sync.Mutex{},
opts: map[string]string{},
}
if len(options) > 0 {
d.opts[NfsOptions] = options
}
return d
}
Expand Down Expand Up @@ -74,7 +89,7 @@ func (n nfsDriver) Mount(r volume.Request) volume.Response {
return volume.Response{Err: err.Error()}
}

if err := mountVolume(source, dest, n.version); err != nil {
if err := n.mountVolume(source, dest, n.version); err != nil {
return volume.Response{Err: err.Error()}
}
n.mountm.Add(dest, r.Name)
Expand Down Expand Up @@ -115,14 +130,42 @@ func (n nfsDriver) fixSource(name string) string {
return strings.Join(source, "/")
}

func mountVolume(source, dest string, version int) error {
func (n nfsDriver) mountVolume(source, dest string, version int) error {
var cmd string

options := n.mountOptions(n.mountm.GetOptions(dest))
opts := ""
if val, ok := options[NfsOptions]; ok {
opts = val
}
switch version {
case 3:
cmd = fmt.Sprintf("mount -o port=2049,nolock,proto=tcp %s %s", source, dest)
if len(opts) < 1 {
opts = DefaultNfsV3
}
cmd = fmt.Sprintf("mount -o %s %s %s", opts, source, dest)
default:
cmd = fmt.Sprintf("mount -t nfs4 %s %s", source, dest)
if len(opts) > 0 {
cmd = fmt.Sprintf("mount -t nfs4 -o %s %s %s", opts, source, dest)
} else {
cmd = fmt.Sprintf("mount -t nfs4 %s %s", source, dest)
}
}
log.Debugf("exec: %s\n", cmd)
return run(cmd)
}

func (n nfsDriver) mountOptions(src map[string]string) map[string]string {
if (len(n.opts) == 0 && len(src) == 0) {
return EmptyMap
}

dst := map[string]string {}
for k, v := range n.opts {
dst[k] = v
}
for k, v := range src {
dst[k] = v
}
return dst
}
5 changes: 4 additions & 1 deletion netshare/netshare.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const (
DomainFlag = "domain"
SecurityFlag = "security"
VersionFlag = "version"
OptionsFlag = "options"
BasedirFlag = "basedir"
VerboseFlag = "verbose"
AvailZoneFlag = "az"
Expand Down Expand Up @@ -88,6 +89,7 @@ func setupFlags() {
cifsCmd.Flags().StringP(NetRCFlag, "", os.Getenv("HOME"), "The default .netrc location. Default is the user.home directory")

nfsCmd.Flags().IntP(VersionFlag, "v", 4, "NFS Version to use [3 | 4]. Can also be set with NETSHARE_NFS_VERSION")
nfsCmd.Flags().StringP(OptionsFlag, "o", "", fmt.Sprintf("Options passed to nfs mounts (ex: %s)", drivers.DefaultNfsV3))

efsCmd.Flags().String(AvailZoneFlag, "", "AWS Availability zone [default: \"\", looks up via metadata]")
efsCmd.Flags().String(NameServerFlag, "", "Custom DNS nameserver. [default \"\", uses /etc/resolv.conf]")
Expand All @@ -111,7 +113,8 @@ func execNFS(cmd *cobra.Command, args []string) {
}
}
}
d := drivers.NewNFSDriver(rootForType(drivers.NFS), version)
options, _ := cmd.Flags().GetString(OptionsFlag)
d := drivers.NewNFSDriver(rootForType(drivers.NFS), version, options)
start(drivers.NFS, d)
}

Expand Down
191 changes: 191 additions & 0 deletions vendor/github.com/docker/go-connections/LICENSE

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file.
Loading

0 comments on commit d130d84

Please sign in to comment.