From abaa4a11f9050d14f0d67ad3674f6f7509cbd326 Mon Sep 17 00:00:00 2001 From: yo Date: Sun, 16 Oct 2022 15:19:03 +0200 Subject: [PATCH] Check if dataset exist, create dataset --- cmd/utils.go | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/cmd/utils.go b/cmd/utils.go index 11e0559..6aad1df 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -4,7 +4,7 @@ import ( "io" "os" "fmt" - "log" + //"log" "sort" "bufio" "errors" @@ -15,6 +15,7 @@ import ( "io/ioutil" "github.com/google/shlex" "github.com/c2h5oh/datasize" + log "github.com/sirupsen/logrus" ) const ( @@ -411,6 +412,31 @@ func zfsCopyIncremental(firstsnap string, secondsnap string, dest string) error return nil } + +// Return true if dataset exist, false if not, false & error if anything else +func doZfsDatasetExist(dataset string) (bool, error) { + cmd := fmt.Sprintf("zfs list %s", dataset) + out, err := executeCommand(cmd) + if err != nil { + if strings.HasSuffix(strings.TrimSuffix(out, "\n"), "dataset does not exist") { + return false, nil + } else { + return false, errors.New(fmt.Sprintf("%v; command returned \"%s\"", err, out)) + } + } + return true, nil +} + +// Create ZFS dataset. mountpoint can be "none", then the dataset won't be mounted +func createZfsDataset(dataset, mountpoint, compression string) error { + cmd := fmt.Sprintf("zfs create -o mountpoint=%s -o compression=%s %s", mountpoint, compression, dataset) + out, err := executeCommand(cmd) + if err != nil { + return errors.New(fmt.Sprintf("%v; command returned \"%s\"", err, out)) + } + return nil +} + /***************************************************************************** * * rc.conf management