modified: ri_data.py

add mothod of Raid.get_size
This commit is contained in:
fling
2010-10-16 18:26:28 +08:00
parent 56609c0fec
commit dffc9194cd

View File

@@ -1,10 +1,10 @@
#!/usr/bin/python
import re
import sys
import commands
from xml.dom import minidom
from xml.dom.ext import PrettyPrint
from ri_tk_cmd import raid_calc_size
# xml file names
install_xml = '../xml/install.xml'
@@ -49,15 +49,14 @@ class Partition:
self.size = sz
self.type = tp
self.filesystem = fs
self.flags = fg
self.israid = fg
self.from_os = fr
Partition.dict[dev] = self
@staticmethod
def init_from_os():
''' create a Partition instance from hardware info'''
device_list=[]
Partition.unit='GB'
Partition.unit='MB'
cmd_cat = 'cat /proc/partitions'
st,o = commands.getstatusoutput(cmd_cat)
@@ -123,10 +122,10 @@ class Partition:
s[sz_i:tp_i].strip().rstrip(Partition.unit), # size
s[tp_i:fs_i].strip(), # type
re.search('swap', s[fs_i:flg_i]) and 'swap' or s[fs_i:flg_i].strip(), # file system
re.search('raid',s[flg_i:]) and 'yes' or 'no' # flags
re.search('raid',s[flg_i:]) and 'yes' or 'no', # flags
"yes" #from os
)
@staticmethod
def init_from_xml(node):
''' create Partition instances from xml node '''
@@ -138,7 +137,7 @@ class Partition:
p.attributes['size'].value.encode('ascii'),\
p.attributes['type'].value.encode('ascii'),\
p.attributes['file-system'].value.encode('ascii'),\
p.attributes['flags'].value.encode('ascii'),\
p.attributes['israid'].value.encode('ascii'),\
p.attributes['from_os'].value.encode('ascii'))
@@ -158,28 +157,30 @@ p_node - xml node (parent node)'''
size_attr = doc.createAttribute('size')
type_attr = doc.createAttribute('type')
fs_attr = doc.createAttribute('file-system')
flags_attr = doc.createAttribute('flags')
israid_attr = doc.createAttribute('israid')
from_attr = doc.createAttribute('from_os')
dev_attr.value = p.device
start_attr.value = p.start
size_attr.value = p.size
type_attr.value = p.type
fs_attr.value = p.filesystem
flags_attr.value = p.flags
israid_attr.value = p.israid
from_attr.value = p.from_os
pt.setAttributeNode(dev_attr)
pt.setAttributeNode(start_attr)
pt.setAttributeNode(size_attr)
pt.setAttributeNode(type_attr)
pt.setAttributeNode(fs_attr)
pt.setAttributeNode(flags_attr)
pt.setAttributeNode(israid_attr)
pt.setAttributeNode(from_attr)
pts.appendChild(pt)
p_node.appendChild(pts)
# ri_tk_cmd.py use
@staticmethod
def get_size(dev):
return Partition.dict[dev].size
if Partition.dict.has_key(dev):
return Partition.dict[dev].size
return
class Raid:
''' raid information '''
@@ -292,9 +293,20 @@ p_node - xml node (parent node) '''
#ri_tk_cmd.py use
@staticmethod
def get_size(dev):
active=Raid.dict[dev].active
sz=sys.maxint
level=Raid.dict[dev].level
return raid_calc_size(level,active)
active=Raid.dict[dev].active_components
for d in active:
if float(Partition.dict[d].size) < float(sz):
sz=float(Partition.dict[d].size)
if level == '0':
sz=sz*len(active)
return str(sz)
elif level == '1':
return str(sz)
elif level == '5':
sz=sz*(len(active)-1)
return str(sz)
@staticmethod
def get_next_device():
@@ -353,6 +365,8 @@ class MountPoint:
for dev in s1-s2:
del MountPoint.dict[dev]
#MountPoint.dict.keys().sort()
#print "keys=",MountPoint.dict.keys()
@staticmethod
def init_from_xml(node):