Skip to content

Commit

Permalink
Hide underlying implementation and fix bz1328588
Browse files Browse the repository at this point in the history
Signed-off-by: Antonio Murdaca <runcom@redhat.com>
  • Loading branch information
runcom committed May 3, 2016
1 parent 7eb53d5 commit 6b75680
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 14 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ _testmain.go
*.exe
*.test
*.prof

docker-lvm-plugin
39 changes: 25 additions & 14 deletions driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,25 +49,28 @@ func (l *lvmDriver) Create(req volume.Request) volume.Response {
}

cmdArgs := []string{"-n", req.Name}
if s, ok := req.Options["size"]; ok && s != "" {
cmdArgs = append(cmdArgs, "--size", s)
s, ok := req.Options["size"]
if !ok || (ok && s == "") {
return resp(fmt.Errorf("Please specify a size with --size"))
}
cmdArgs = append(cmdArgs, "--size", s)
cmdArgs = append(cmdArgs, vgName)

cmd := exec.Command("lvcreate", cmdArgs...)
if out, err := cmd.CombinedOutput(); err != nil {
return resp(fmt.Errorf("%s", string(out)))
if _, err := cmd.CombinedOutput(); err != nil {
return resp(fmt.Errorf("error creating volume"))
}
defer removeLogicalVolume(req.Name, vgName)

cmd = exec.Command("mkfs.xfs", fmt.Sprintf("/dev/%s/%s", vgName, req.Name))
if out, err := cmd.CombinedOutput(); err != nil {
return resp(fmt.Errorf("%s", string(out)))
if _, err := cmd.CombinedOutput(); err != nil {
return resp(fmt.Errorf("error partitioning volume"))
}

mp := getMountpoint(l.home, req.Name)
if err := os.MkdirAll(mp, 0700); err != nil {
return resp(err)
}
defer os.RemoveAll(mp)

v := &vol{req.Name, mp}
l.volumes[v.Name] = v
Expand Down Expand Up @@ -120,9 +123,8 @@ func (l *lvmDriver) Remove(req volume.Request) volume.Response {
return resp(err)
}

cmd := exec.Command("lvremove", "--force", fmt.Sprintf("%s/%s", vgName, req.Name))
if out, err := cmd.CombinedOutput(); err != nil {
return resp(fmt.Errorf("%s", string(out)))
if _, err := removeLogicalVolume(req.Name, vgName); err != nil {
return resp(fmt.Errorf("error removing volume"))
}

delete(l.count, req.Name)
Expand All @@ -133,22 +135,31 @@ func (l *lvmDriver) Remove(req volume.Request) volume.Response {
return resp(getMountpoint(l.home, req.Name))
}

func removeLogicalVolume(name, vgName string) ([]byte, error) {
cmd := exec.Command("lvremove", "--force", fmt.Sprintf("%s/%s", vgName, name))
if out, err := cmd.CombinedOutput(); err != nil {
return out, err
}
return nil, nil
}

func (l *lvmDriver) Path(req volume.Request) volume.Response {
return resp(getMountpoint(l.home, req.Name))
}

func (l *lvmDriver) Mount(req volume.Request) volume.Response {
l.mu.Lock()
defer l.mu.Unlock()

l.count[req.Name]++
vgName, err := getVolumegroupName(l.vgConfig)
if err != nil {
return resp(err)
}
if l.count[req.Name] == 1 {
cmd := exec.Command("mount", fmt.Sprintf("/dev/%s/%s", vgName, req.Name), getMountpoint(l.home, req.Name))
if out, err := cmd.CombinedOutput(); err != nil {
return resp(fmt.Errorf("%s", string(out)))
if _, err := cmd.CombinedOutput(); err != nil {
return resp(fmt.Errorf("error mouting volume"))
}
}
if err := saveToDisk(l.volumes, l.count); err != nil {
Expand All @@ -163,8 +174,8 @@ func (l *lvmDriver) Unmount(req volume.Request) volume.Response {
l.count[req.Name]--
if l.count[req.Name] == 0 {
cmd := exec.Command("umount", getMountpoint(l.home, req.Name))
if out, err := cmd.CombinedOutput(); err != nil {
return resp(fmt.Errorf("%s", string(out)))
if _, err := cmd.CombinedOutput(); err != nil {
return resp(fmt.Errorf("error unmounting volume"))
}
}
if err := saveToDisk(l.volumes, l.count); err != nil {
Expand Down

0 comments on commit 6b75680

Please sign in to comment.