X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-plugins%2Ffai%2Fadmin%2Ffai%2Fclass_faiPartition.inc;h=ad553a2348acd2107c0841b3b4bd92271772a260;hb=9dc6ac611bbe02539e5d9326a6106f8160bc56c3;hp=f8a9a121514301de498068fb15049ef5989fa4e3;hpb=82ddc2d3e038c9abe950b9a58fb96358b4eda3ae;p=gosa.git diff --git a/gosa-plugins/fai/admin/fai/class_faiPartition.inc b/gosa-plugins/fai/admin/fai/class_faiPartition.inc index f8a9a1215..ad553a234 100644 --- a/gosa-plugins/fai/admin/fai/class_faiPartition.inc +++ b/gosa-plugins/fai/admin/fai/class_faiPartition.inc @@ -23,19 +23,20 @@ class faiPartition extends plugin var $FAIdiskType = "disk"; + // Size options. var $FAIpartitionSizeType = "fixed"; var $sizeStart = 0; var $sizeStop = 0; var $sizeStart_Type = "MB"; var $sizeStop_Type = "MB"; - + + // Flags var $bootable = false; var $resize = false; + var $encrypted = false; var $preserve = false; var $preserveType = "always"; - var $encrypted = false; - var $status = ""; var $raidDevices = array(); // Once we've exceeded the primary partition limit, @@ -46,7 +47,6 @@ class faiPartition extends plugin { $this->parent = $parent; - $this->status = "new"; $this->FAIdiskType = $type; // Check if we should be able to add primary partitions. @@ -66,15 +66,12 @@ class faiPartition extends plugin // Load attributes from existing partition if($object){ - foreach($this->attributes as $attr){ if(isset($object[$attr])){ $this->$attr = $object[$attr]; } } - $this->status = $object['status']; - if($type == "disk" || $type =="lvm"){ /* Prepare size attribute @@ -85,14 +82,14 @@ class faiPartition extends plugin * remaining * - */ // Fixed - if(preg_match("/^[0-9]*(KB|MB|GB|TB|PB|%)$/",$this->FAIpartitionSize)){ + if(preg_match("/^[0-9]{1,}(KB|MB|GB|TB|PB|%|)$/",$this->FAIpartitionSize)){ $this->sizeStart = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\1",$this->FAIpartitionSize); $this->sizeStart_Type = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\2",$this->FAIpartitionSize); $this->FAIpartitionSizeType = "fixed"; }else // Dynamic range - if(preg_match("/^[0-9]*(KB|MB|GB|TB|PB|%)-[0-9]*(KB|MB|GB|TB|PB|%)$/",$this->FAIpartitionSize)){ + if(preg_match("/^[0-9]{1,}(KB|MB|GB|TB|PB|%|)-[0-9]{1,}(KB|MB|GB|TB|PB|%|)$/",$this->FAIpartitionSize)){ $this->sizeStart = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%).*$/","\\1",$this->FAIpartitionSize); $this->sizeStart_Type = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%).*$/","\\2",$this->FAIpartitionSize); $this->sizeStop = preg_replace("/^[^\-]*\-([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\1",$this->FAIpartitionSize); @@ -101,9 +98,16 @@ class faiPartition extends plugin }else // Dynamic range - if(preg_match("/^\-$/",$this->FAIpartitionSize)){ + if(preg_match("/^(0|)\-$/",$this->FAIpartitionSize)){ $this->FAIpartitionSizeType = "remaining"; + } + // Ensure that we've a valid value type selected. + if(!preg_match("/(KB|MB|GB|TB|PB|%)/",$this->sizeStart_Type)){ + $this->sizeStart_Type = "MB"; + } + if(!preg_match("/(KB|MB|GB|TB|PB|%)/",$this->sizeStop_Type)){ + $this->sizeStop_Type = "MB"; } /* Check for encrypted partitions @@ -114,8 +118,9 @@ class faiPartition extends plugin } }elseif($type == "raid"){ - - $usedDisks = split(",",$this->FAIpartitionSize); + + // Extract raid devices out of the partition size attribute. + $usedDisks = explode(",",$this->FAIpartitionSize); foreach($usedDisks as $disk){ $name = preg_replace("/:.*$/","",$disk); $spare = preg_match("/:spare/",$disk); @@ -195,7 +200,8 @@ class faiPartition extends plugin "ext4" => _("ext4"), "reiserfs" => _("reiser fs"), "xfs" => _("xfs"), - "btrfs" => _("btrfs")); + "btrfs" => _("btrfs"), + "-" => "-"); $smarty->assign("partitionTypes", $types); $smarty->assign("partitionSizeTypes", $partitionSizeTypes); @@ -212,6 +218,7 @@ class faiPartition extends plugin $smarty->assign("FAIfsTypes", $FAIfsTypes); $smarty->assign("cn", $this->cn); + $smarty->assign("freeze", preg_match("/freeze/i",$this->parent->FAIstate)); $smarty->assign("plist",$this->getRaidlist()); $smarty->assign("physicalPartitionList",$this->getPartitionlist()); @@ -223,28 +230,59 @@ class faiPartition extends plugin return($smarty->fetch(get_template_path("faiPartition.tpl", TRUE, dirname(__FILE__)))); } - + + /* Returns a list of all partitions that are useable + * for raid arrays. + */ function getPartitionList() { - $array = array(); + $may = $used = array(); foreach($this->parent->parent->disks as $disk){ - if($disk['FAIdiskType'] != "raid"){ - foreach($disk['partitions'] as $key => $part){ + + // Skip ourselves + if($disk['cn'] == $this->parent->DISKcn) continue; + + // Add partition from lvm combinations + if($disk['FAIdiskType'] == "lvm"){ + $used = array_merge($used,$disk['FAIlvmDevice']); + } + + foreach($disk['partitions'] as $key => $part){ + + // Add disks of raid arrays, to the used list. + if($disk['FAIdiskType'] == "raid"){ + foreach(explode(",",$part['FAIpartitionSize']) as $rDevice){ + $used[] = preg_replace("/:.*$/i","",$rDevice); + } + } + + // Collect all available disks + if($disk['FAIdiskType'] == "disk"){ $name = $part['cn']; if(!isset($this->raidDevices[$name])){ - $array[$name] = $name." (".$disk['cn'].")"; + $may[] = $name; } } } } - return($array); + + // Check which of the available disks are unused. + $ret = array(); + foreach($may as $val){ + if(!in_array($val,$used)){ + $ret[$val] = $val; + } + } + return($ret); } + /* Creates a human readable list of all used partitions + * of a raid device. + */ function getRaidList() { $divlist = new divSelectBox("RaidList"); - $disks = $this->parent->parent->disks; $objs = array(); foreach($disks as $disk){ @@ -308,7 +346,11 @@ class faiPartition extends plugin // Remove partition if(isset($_POST['delPhysicalPartition']) && isset($_POST['physicalPartition'])){ - unset($this->raidDevices[$_POST['physicalPartition']]); + foreach($_POST['physicalPartition'] as $key){ + if(isset($this->raidDevices[$key])){ + unset($this->raidDevices[$key]); + } + } } // Toggle spare flag for partition entries @@ -367,7 +409,7 @@ class faiPartition extends plugin } // check mount point - if($this->FAIfsType != "swap"){ + if($this->FAIfsType != "swap" && $this->FAIfsType != "-"){ if(!preg_match("#^/#",$this->FAImountPoint)){ $msgs[] = msgPool::invalid(_("Mount point")); } @@ -393,7 +435,7 @@ class faiPartition extends plugin $ret['FAIpartitionSize'] = $this->sizeStart.$this->sizeStart_Type."-". $this->sizeStop.$this->sizeStop_Type;break; case 'remaining' : - $ret['FAIpartitionSize'] = "-";break; + $ret['FAIpartitionSize'] = "0-";break; default: trigger_error("Unknown partition size!"); } @@ -403,6 +445,8 @@ class faiPartition extends plugin } }elseif($this->FAIdiskType == "raid"){ + + // Save selected raid partitions in FAIpartitionSize $ret['FAIpartitionSize'] = ""; foreach($this->raidDevices as $device){ $ret['FAIpartitionSize'] .= $device['name']; @@ -416,7 +460,6 @@ class faiPartition extends plugin } $ret['FAIpartitionSize'] = trim($ret['FAIpartitionSize'],","); } - $ret['status'] = $this->status; if($this->FAIfsType == "swap"){ $ret['FAImountPoint'] = "swap";