require_once("zfs/Snapshot.php");
require_once("zfs/Zvol.php");
require_once("zfs/Zpool.php");
+require_once("zfs/NotifyListener.php");
class OMVRpcServiceZFS extends OMVRpcServiceAbstract {
public function getName() {
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());
}
public function getObjectTree($params, $context) {
public function addObject($params, $context) {
$this->validateMethodContext($context, array("role" => OMV_ROLE_ADMINISTRATOR));
switch ($params['type']) {
- case "Filesystem":
+ case "filesystem":
$name = $params['path'] . "/" . $params['name'];
$tmp = new OMVModuleZFSDataset($name);
break;
- case "Snapshot":
+ case "snapshot":
$name = $params['path'] . "@" . $params['name'];
$tmp = new OMVModuleZFSSnapshot($name);
break;
- case "Volume":
+ case "volume":
$name = $params['path'] . "/" . $params['name'];
$tmp = new OMVModuleZFSZvol($name);
$tmp->create($params['size']);
break;
- case "Pool":
- $name = $params['path'] . "/" . $params['name'];
- $tmp = new OMVModuleZFSZpool($name);
- break;
default:
throw new OMVModuleZFSException("Illegal type provided: " . $params['type']);
break;
$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'];
+ $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.
$uuid = OMVUtil::uuid();
$pathName = $tmp->getMountPoint();
$subdirs = preg_split('/\//',$pathName);
- $reldirpath = $subdirs[count($subdirs)-1];
+ $reldirpath = "";
+ for ($i=2;$i<count($subdirs);$i++) {
+ $reldirpath .= $subdirs[$i] . "/";
+ }
+ $reldirpath = rtrim($reldirpath, "/");
$object = array(
"uuid" => $uuid,
"name" => $params['sharename'],