X-Git-Url: http://git.datanom.net/omvzfs.git/blobdiff_plain/a36352f77c28bdf8f2834a64bd8520b73bfcf040..c6117b32379445101780af97836973ba9151cac7:/gui/rpc/zfs.inc diff --git a/gui/rpc/zfs.inc b/gui/rpc/zfs.inc index 3d61e1a..16b5a13 100644 --- a/gui/rpc/zfs.inc +++ b/gui/rpc/zfs.inc @@ -11,6 +11,7 @@ require_once("zfs/Dataset.php"); 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() { @@ -19,6 +20,7 @@ class OMVRpcServiceZFS extends OMVRpcServiceAbstract { /* Initialize the RPC service. Different methods of the RPC service are declared here*/ public function initialize() { + $this->registerMethod("addPool"); $this->registerMethod("getObjectTree"); $this->registermethod("passParam"); $this->registermethod("addObject"); @@ -30,6 +32,45 @@ class OMVRpcServiceZFS extends OMVRpcServiceAbstract { $this->registermethod("createShare"); } + public function addPool($params, $context) { + $this->validateMethodContext($context, array("role" => OMV_ROLE_ADMINISTRATOR)); + switch ($params['pooltype']) { + case "basic": + $pooltype = OMVModuleZFSVdevType::OMVMODULEZFSPLAIN; + break; + case "mirror": + $pooltype = OMVModuleZFSVdevType::OMVMODULEZFSMIRROR; + break; + case "raidz1": + $pooltype = OMVModuleZFSVdevType::OMVMODULEZFSRAIDZ1; + break; + case "raidz2": + $pooltype = OMVModuleZFSVdevType::OMVMODULEZFSRAIDZ2; + break; + case "raidz3": + $pooltype = OMVModuleZFSVdevType::OMVMODULEZFSRAIDZ3; + break; + default: + 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'] . " "; + } + + $disks = preg_split("/[,;]/", $params['devices']); + $vdev = new OMVModuleZFSVdev($params['name'], $pooltype, $disks); + $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) { $this->validateMethodContext($context, array("role" => OMV_ROLE_ADMINISTRATOR)); $objects = OMVModuleZFSUtil::getZFSFlatArray(); @@ -52,23 +93,19 @@ class OMVRpcServiceZFS extends OMVRpcServiceAbstract { 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;