From 6a420e872e871f8c7e2717fab276cdd8b24eef6c Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Sun, 7 May 2017 12:23:12 +0200 Subject: [PATCH] zfs: implement ZFSSet --- zfs/zfs.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/zfs/zfs.go b/zfs/zfs.go index 6760911..c90f52b 100644 --- a/zfs/zfs.go +++ b/zfs/zfs.go @@ -159,3 +159,27 @@ func ZFSRecv(fs DatasetPath, stream io.Reader, additionalArgs ...string) (err er return nil } +func ZFSSet(fs DatasetPath, prop, val string) (err error) { + + if strings.ContainsRune(prop, '=') { + panic("prop contains rune '=' which is the delimiter between property name and value") + } + + cmd := exec.Command(ZFS_BINARY, "set", fmt.Sprintf("%s=%s", prop, val), fs.ToString()) + + stderr := bytes.NewBuffer(make([]byte, 0, 1024)) + cmd.Stderr = stderr + + if err = cmd.Start(); err != nil { + return err + } + + if err = cmd.Wait(); err != nil { + err = ZFSError{ + Stderr: stderr.Bytes(), + WaitErr: err, + } + } + + return +}