X-Git-Url: http://git.datanom.net/omvzfs.git/blobdiff_plain/c02535923be4d7f22e8356d3895c0ec43fb56e98..aec28e5f3581a9cf26453a678187f007894491bb:/gui/rpc/zfs.inc diff --git a/gui/rpc/zfs.inc b/gui/rpc/zfs.inc index 28902ed..75c22eb 100644 --- a/gui/rpc/zfs.inc +++ b/gui/rpc/zfs.inc @@ -54,9 +54,27 @@ class OMVRpcServiceZFS extends OMVRpcServiceAbstract { throw new OMVModuleZFSException("Incorrect pool type specified"); break; } + //Check for user supplied options + $opts = ""; + if ($params['force']) { + $opts .= "-f "; + } + if (strlen($params['mountpoint']) > 0) { + $opts .= "-m " . $params['mountpoint'] . " "; + } + + //Use /dev/disk/by-path as deafult when creating new pools as suggested in ZoL FAQ. $disks = preg_split("/[,;]/", $params['devices']); + if (file_exists("/dev/disk/by-path/")) { + $tmp_disks = array(); + foreach ($disks as $disk) { + $tmp_disks[] = OMVModuleZFSUtil::getDiskPath($disk); + } + $disks = $tmp_disks; + } + $vdev = new OMVModuleZFSVdev($params['name'], $pooltype, $disks); - $pool = new OMVModuleZFSZpool($vdev); + $pool = new OMVModuleZFSZpool($vdev, $opts); //Ugly fix to solve the problem of blkid not displaying info on newly created pools $pool->export(); $pool->import($pool->getName()); @@ -107,6 +125,11 @@ class OMVRpcServiceZFS extends OMVRpcServiceAbstract { $this->validateMethodContext($context, array("role" => OMV_ROLE_ADMINISTRATOR)); switch ($params['type']) { case "Filesystem": + $name = $params['name']; + OMVModuleZFSUtil::deleteShares($name); + $tmp = new OMVModuleZFSDataset($name); + $tmp->destroy(); + break; case "Clone": $name = $params['name']; $tmp = new OMVModuleZFSDataset($name); @@ -250,15 +273,13 @@ class OMVRpcServiceZFS extends OMVRpcServiceAbstract { $this->validateMethodContext($context, array("role" => OMV_ROLE_ADMINISTRATOR)); //Get the UUID of the Pool - $pooluuid = OMVModuleZFSUtil::getUUIDbyName($params['name']); - preg_match('/^([A-Za-z0-9]+)\/?.*$/', $params['name'], $result); - $poolname = $result[1]; - unset($result); + $poolname = OMVModuleZFSUtil::getPoolname($params['name']); + $pooluuid = OMVModuleZFSUtil::getUUIDbyName($poolname); //Get the mntent object and fetch it's uuid. - $xpath = "//system/fstab/mntent[fsname=" . $pooluuid . "]"; - $object = $xmlConfig->get($xpath); - $mntentref = $object['uuid']; + $xpath = "//system/fstab/mntent[fsname='" . $pooluuid . "']"; + $mountpoint = $xmlConfig->get($xpath); + $mntentref = $mountpoint['uuid']; // Prepare the configuration object. Use the name of the shared // folder as the relative directory name of the share. @@ -276,8 +297,7 @@ class OMVRpcServiceZFS extends OMVRpcServiceAbstract { $uuid = OMVUtil::uuid(); $pathName = $tmp->getMountPoint(); - $subdirs = preg_split('/\//',$pathName); - $reldirpath = $subdirs[count($subdirs)-1]; + $reldirpath = OMVModuleZFSUtil::getReldirpath($pathName); $object = array( "uuid" => $uuid, "name" => $params['sharename'],