Code

Updated fai lvm partition handling.
[gosa.git] / gosa-plugins / fai / admin / fai / class_faiPartition.inc
1 <?php
3 class faiPartition extends plugin
4 {
5   var $attributes = array("cn","description","FAIfsCreateOptions","FAIfsOptions","FAIfsTuneOptions",
6       "FAIfsType","FAImountOptions","FAImountPoint","FAIpartitionNr","FAIpartitionFlags","FAIdiskType",
7       "FAIpartitionSize","FAIpartitionType","FAIstate", "bootable","resize", "preserve", "preserveType",
8       "encrypted");
10   var $cn  = "";
11   var $description  = "";
12   var $FAIfsCreateOptions = "";
13   var $FAIfsOptions = "";
14   var $FAIfsTuneOptions = "";
15   var $FAIfsType = "";
16   var $FAImountOptions = "";
17   var $FAImountPoint = "";
18   var $FAIpartitionNr = "";
19   var $FAIpartitionSize = "";
20   var $FAIpartitionType = "";
21   var $FAIstate = "";
22   var $FAIpartitionFlags = "";
23   
24   var $FAIdiskType = "disk";
26   var $FAIpartitionSizeType = "fixed";
27   var $sizeStart = 0;
28   var $sizeStop  = 0;
29   var $sizeStart_Type = "MB";
30   var $sizeStop_Type  = "MB";
31    
32   var $bootable = false; 
33   var $resize = false;
34   var $preserve = false;
35   var $preserveType = "always";
36   var $encrypted = false;
38   var $raidDevices = array();
40   function __construct($config, $object, $parent,$type)
41   {
43     $this->parent = $parent;
45     foreach($this->attributes as $attr){
46       if(isset($object[$attr])){
47         $this->$attr = $object[$attr];
48       }
49     }
51     $this->FAIdiskType = $type;
53     if($type == "disk"){
55       /* Prepare size attribute 
56        * This attribute may represent a range, a fixed value 
57        *  or a percentage.
58        * fixed is just a number   * 500MB
59        * range                    * 500MB-1TB
60        * remaining                * -
61        */
62       // Fixed
63       if(preg_match("/^[0-9]*(KB|MB|GB|TB|PB|%)$/",$this->FAIpartitionSize)){
64         $this->sizeStart = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\1",$this->FAIpartitionSize);
65         $this->sizeStart_Type = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\2",$this->FAIpartitionSize);
66         $this->FAIpartitionSizeType = "fixed";
67       }else
69       // Dynamic range
70       if(preg_match("/^[0-9]*(KB|MB|GB|TB|PB|%)-[0-9]*(KB|MB|GB|TB|PB|%)$/",$this->FAIpartitionSize)){
71         $this->sizeStart = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%).*$/","\\1",$this->FAIpartitionSize);
72         $this->sizeStart_Type = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%).*$/","\\2",$this->FAIpartitionSize);
73         $this->sizeStop = preg_replace("/^[^\-]*\-([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\1",$this->FAIpartitionSize);
74         $this->sizeStop_Type = preg_replace("/^[^\-]*\-([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\2",$this->FAIpartitionSize);
75         $this->FAIpartitionSizeType = "dynamic";
76       }else
78       // Dynamic range
79       if(preg_match("/^\-$/",$this->FAIpartitionSize)){
80         $this->FAIpartitionSizeType = "remaining";
82       }
83     }elseif($type == "raid"){
84   
85       $usedDisks = split(",",$this->FAIpartitionSize);
86       foreach($usedDisks as $disk){
87         $name = preg_replace("/:.*$/","",$disk);
88         $spare = preg_match("/:spare/",$disk);
89         $missing = preg_match("/:missing/",$disk);
90         $this->raidDevices[$name] = 
91           array(
92               "name" => $name, 
93               "spare" => $spare, 
94               "missing" => $missing);
95       }
96     }
97   }
99   function execute()
100   {
101     plugin::execute();
102     $smarty = get_smarty();
104     // Remove partition
105     if(isset($_POST['addPhysicalPartition']) && isset($_POST['phyiscalPartitionAdd'])){
106       $name = $_POST['phyiscalPartitionAdd'];
107       $this->raidDevices[$name] = array("name" => $name,"spare"=>false,"missing"=>false);     
108     }
110     // Create a list of selectable partition types
111     if($this->FAIdiskType == "disk"){
112       $types  = array(
113           "primary" => _("Primary"),
114           "secondary" => _("Secondary"));
115     }elseif($this->FAIdiskType == "raid"){
116       $types  = array(
117           "raid0" => _("Raid 0"),
118           "raid1" => _("Raid 1"),
119           "raid5" => _("Raid 5"),
120           "raid6" => _("Raid 6"));
121     }else{
122       $types = "";
123     }
124      
125     // Create a list of all size options
126     $partitionSizeTypes  = array(
127         "fixed"     => _("Fixed"),
128         "dynamic"     => _("Dynamic"),
129         "remaining" => _("Use remaining space")
130         );
132     // Create a list of all size options
133     $sizeTypes  = array(
134         "KB"      => _("KB"),
135         "MB"      => _("MB"),
136         "GB"      => _("GB"),
137         "TB"      => _("TB"),
138         "PB"      => _("PB"),
139         "%"      => _("Percent")
140         );
142     // Preserve types 
143     $preserveTypes = array(
144         "always" => _("Always"),
145         "reinstall" => _("Reinstall"));
147     // File system types.  
148     $FAIfsTypes = array(
149         "swap" => _("Swap"),
150         "ext2" => _("Ext 2"),
151         "ext3" => _("Ext 3"),
152         "ext4" => _("Ext 4"),
153         "reiserfs" => _("Reiser fs"),
154         "xfs" => _("Xfs"),
155         "btrfs" => _("Btrfs"));
157         
159  
160     $smarty->assign("partitionTypes", $types);
161     $smarty->assign("partitionSizeTypes", $partitionSizeTypes);
162     $smarty->assign("FAIpartitionSizeType", $this->FAIpartitionSizeType);
163     $smarty->assign("sizeTypes", $sizeTypes);
165     $smarty->assign("sizeStart_Type", $this->sizeStart_Type);
166     $smarty->assign("sizeStop_Type", $this->sizeStop_Type);
167     $smarty->assign("sizeStart", $this->sizeStart);
168     $smarty->assign("sizeStop", $this->sizeStop);
170     $smarty->assign("preserveTypes", $preserveTypes);
171     $smarty->assign("preserveType", $this->preserveType);
173     $smarty->assign("FAIfsTypes", $FAIfsTypes);
175     $smarty->assign("plist",$this->getRaidlist());
176     $smarty->assign("phyiscalPartitionList",$this->getPartitionlist());
178     foreach($this->attributes as $attr){
179       $smarty->assign($attr,$this->$attr);
180     }
181     return($smarty->fetch(get_template_path("faiPartition.tpl", TRUE, dirname(__FILE__))));
182   }
184     
185   function getPartitionList()
186   {
187     $array = array();  
188     foreach($this->parent->parent->disks as $disk){
189       foreach($disk['partitions'] as $key => $part){
190         $name = $disk['cn'].$key;
191         if(!isset($this->raidDevices[$name])){
192           $array[$name] = $name;
193         }
194       }
195     }
196     return($array);
197   }
200   function getRaidList()
201   {
202     $divlist = new divSelectBox("RaidList");
203    
204     $disks = $this->parent->parent->disks;
205     $objs = $disks;
206     foreach($disks as $disk){
207       foreach($disk['partitions'] as $id => $part){
208         $objs[$disk['cn'].$id] = $part;
209       }
210     }
211     
212     $list = array();
213     foreach($this->raidDevices as $device){
214       $list[$device['name']] = $device['name'];
216       if(isset($objs[$device['name']]['FAIpartitionSize'])){
217         $list[$device['name']].= _("Size").":&nbsp;";
218         $list[$device['name']].= $objs[$device['name']]['FAIpartitionSize'];
219       }
221       $list[$device['name']].= " &nbsp; "._("Options").": ";
222       if($device['spare']){
223         $list[$device['name']].= "&nbsp;"._("Spare")."&nbsp;";
224       }
225       if($device['missing']){
226         $list[$device['name']].= "&nbsp;"._("Missing")."&nbsp;";
227       }
228     }
229     return($list);
230   }
232   function save_object()
233   {
234     if(isset($_POST['faiPartition'])){
235       foreach($this->attributes as $attr){
236         if(isset($_POST[$attr])){
237           $this->$attr = get_post($attr);
238         }
239       }
240       foreach(array("FAIpartitionSizeType","sizeStart","sizeStop","sizeStart_Type","sizeStop_Type") as $attr){
241         if(isset($_POST[$attr])){
242           $this->$attr = get_post($attr);
243         }
244       }
245       foreach(array("bootable","preserve","resize","encrypted") as $attr){
246         if(isset($_POST[$attr])){
247           $this->$attr = TRUE;
248         }else{
249           $this->$attr = FALSE;
250         }
251       }
253       // Remove partition
254       if(isset($_POST['delPhysicalPartition']) && isset($_POST['phyiscalPartition'])){
255         unset($this->raidDevices[$_POST['phyiscalPartition']]); 
256       }
258       // Toggle spare flag for partition entries
259       if(isset($_POST['toggleSpare']) && isset($_POST['phyiscalPartition'])){
260         $this->raidDevices[$_POST['phyiscalPartition']]['spare'] = 
261             !$this->raidDevices[$_POST['phyiscalPartition']]['spare'];
262       }
264       // Toggle missing flag for partition entries
265       if(isset($_POST['toggleMissing']) && isset($_POST['phyiscalPartition'])){
266         $this->raidDevices[$_POST['phyiscalPartition']]['missing'] = 
267             !$this->raidDevices[$_POST['phyiscalPartition']]['missing'];
268       }
269     } 
270   }
272   function save()
273   {
274     $ret = array();
275     foreach($this->attributes as $attr){
276       $ret[$attr] = $this->$attr;
277     }
279     // Save partition size
280     if($this->FAIdiskType == "disk"){ 
281       switch($this->FAIpartitionSizeType){
282         case 'fixed' : 
283           $ret['FAIpartitionSize'] = $this->sizeStart.$this->sizeStart_Type;break; 
284         case 'dynamic' : 
285           $ret['FAIpartitionSize'] = $this->sizeStart.$this->sizeStart_Type."-".  
286             $this->sizeStop.$this->sizeStop_Type;break; 
287         case 'remaining' : 
288           $ret['FAIpartitionSize'] = "-";break; 
289         default: trigger_error("Unknown partition size!");
290       }
291     }elseif($this->FAIdiskType == "raid"){
292       $ret['FAIpartitionSize'] = "";
293       foreach($this->raidDevices as $device){
294         $ret['FAIpartitionSize'] .= $device['name'];
295         if($device['spare']){
296           $ret['FAIpartitionSize'] .= ":spare";
297         }
298         if($device['missing']){
299           $ret['FAIpartitionSize'] .= ":missing";
300         }
301         $ret['FAIpartitionSize'] .= ",";
302       }
303       $ret['FAIpartitionSize'] = trim($ret['FAIpartitionSize'],",");
304     }
305     return($ret);
306   }
308 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
309 ?>