add raid screen

modify raid data layout in install.xml
This commit is contained in:
Zhi Li
2010-08-18 09:26:51 +07:59
parent 4ad1c428e0
commit 684b5d21a4
4 changed files with 262 additions and 56 deletions

View File

@@ -120,12 +120,13 @@ p_node - xml node (parent node)'''
class Raid:
''' raid information '''
list = []
def __init__(self, raid_dev, raid_type, raid_size, raw_devs):
def __init__(self, dev, level, sz, a_devs, s_devs=[]):
''' Raid init function '''
self.raid_device = raid_dev
self.raid_type = raid_type
self.raid_size = raid_size
self.raw_devices = raw_devs
self.device = dev
self.level = level
self.size = sz
self.active_components = a_devs
self.spare_components = s_devs
Raid.list.append(self)
@staticmethod
@@ -146,25 +147,40 @@ class Raid:
if len(dev_res)>1: # matched
# dev_res[0] is ''
raid_dev = dev_res[1]
raid_type = dev_res[2]
raw_devs =[]
raid_level = dev_res[2]
act_cmpts =[]
for ss in dev_res[3].split():
raw_devs.append(ss[:ss.index('[')])
Raid(raid_dev, raid_type, '-1', raw_devs)
act_cmpts.append(ss[:ss.index('[')])
Raid(raid_dev, raid_level, '-1', act_cmpts)
@staticmethod
def add_component(node, l):
''' add component devices (in xml node) to list
node - xml node
l - list
'''
for sub in node.childNodes:
if sub.nodeType == sub.ELEMENT_NODE and sub.nodeName == 'component':
l.append(sub.firstChild.data.encode('ascii'))
@staticmethod
def init_from_xml(node):
''' create Raid instances from xml node '''
for e in node.childNodes:
if e.nodeType == e.ELEMENT_NODE and e.nodeName == 'raid':
raid_dev = e.attributes['raid-device'].value
raid_type = e.attributes['raid-type'].value
raid_size = e.attributes['raid-size'].value
raw_devs = []
raid_dev = e.attributes['device'].value
raid_level = e.attributes['level'].value
raid_size = e.attributes['size'].value
act_cmpts = []
spr_cmpts = []
for sub_e in e.childNodes:
if sub_e.nodeType == sub_e.ELEMENT_NODE and sub_e.nodeName == 'raw-device':
raw_devs.append(sub_e.firstChild.data.encode('ascii'))
Raid(raid_dev, raid_type, raid_size, raw_devs)
if sub_e.nodeType == sub_e.ELEMENT_NODE:
if sub_e.nodeName == 'active':
Raid.add_component(sub_e, act_cmpts)
elif sub_e.nodeName == 'spare':
Raid.add_component(sub_e, spr_cmpts)
Raid(raid_dev, raid_level, raid_size, act_cmpts, spr_cmpts)
@staticmethod
def to_xml(doc, p_node):
@@ -175,23 +191,33 @@ p_node - xml node (parent node) '''
for r in Raid.list:
rd = doc.createElement('raid')
rd_dev_attr = doc.createAttribute('raid-device')
rd_dev_attr.value = r.raid_device
rd_dev_attr = doc.createAttribute('device')
rd_dev_attr.value = r.device
rd.setAttributeNode(rd_dev_attr)
rd_type_attr = doc.createAttribute('raid-type')
rd_type_attr.value = r.raid_type
rd.setAttributeNode(rd_type_attr)
rd_level_attr = doc.createAttribute('level')
rd_level_attr.value = r.level
rd.setAttributeNode(rd_level_attr)
rd_size_attr = doc.createAttribute('raid-size')
rd_size_attr.value = r.raid_size
rd_size_attr = doc.createAttribute('size')
rd_size_attr.value = r.size
rd.setAttributeNode(rd_size_attr)
for raw_dev in r.raw_devices:
raw_dev_e = doc.createElement('raw-device')
raw_dev_tn = doc.createTextNode(raw_dev)
raw_dev_e.appendChild(raw_dev_tn)
rd.appendChild(raw_dev_e)
rd_act_elem = doc.createElement('active')
for act_c in r.active_components:
act_c_e = doc.createElement('component')
act_c_tn = doc.createTextNode(act_c)
act_c_e.appendChild(act_c_tn)
rd_act_elem.appendChild(act_c_e)
rd.appendChild(rd_act_elem)
rd_spr_elem = doc.createElement('spare')
for spr_c in r.spare_components:
spr_c_e = doc.createElement('component')
spr_c_tn = doc.createTextNode(spr_c)
spr_c_e.appendChild(act_c_tn)
rd_spr_elem.appendChild(spr_c_e)
rd.appendChild(rd_spr_elem)
raids.appendChild(rd)
@@ -200,8 +226,8 @@ p_node - xml node (parent node) '''
@staticmethod
def get_size(dev):
for r in Raid.list:
if r.raid_device == dev:
return r.raid_size
if r.device == dev:
return r.size
class MountPoint:
''' mount-points '''