modify follow files for new datastructure

modified:   interface/ri_data.py
    remove MountPoint use new datastructure for instead

modified:   interface/ri_install.py
    add MakePartitions for partition

modified:   interface/ri_oper.py
    1.add MakePartitions class
    2.modify Format, Mount, ConfigureFstab class

modified:   new_partition/partition_data.py
    1.add disk_from_os attribute to Partition class for disk
    2.add process linux-swap(v1) in Partition class
    3.force convert num and sn to int, beacause when read from install.xml
      sn and num is still string.

modified:   operation/format_partition.sh
    1.add timeout beacause use MakePartitions, need time to generate
    device file
    2.add linux-swap for swap

modified:   operation/functions
    1.add % support, beacause of partition may use 1% to partition
    disks.

new file:   operation/partition_disks.sh
    1.use partition_disks as parted stdin wrapper.

Signed-off-by: Qin Bo <bqin@linx-info.com>
This commit is contained in:
Qin Bo
2013-12-04 19:16:16 +08:00
parent c304aeab2a
commit 02dbaa792b
7 changed files with 175 additions and 46 deletions

View File

@@ -18,9 +18,11 @@
import ri_data
import ri_dep
import os
import os,sys
import subprocess
import signal
sys.path.append('../new_partition/')
import partition_data as p_d
display_operation = None
display_sub_operation = None
@@ -113,6 +115,44 @@ class Operation:
arch = result.stdout.readline().rstrip()
return arch
class MakePartitions(Operation):
'''class for make partitions'''
def __init__(self, scr):
Operation.__init__(self, 'Make partition', u'磁盘分区', 'partition_disks.sh', scr)
def get_stdin(self):
args = ' '
n = 0
disks = p_d.Partition.dict.keys()
disks.sort()
for d in disks:
if p_d.Partition.dict[d]['from_os'] == 'no':
args += '%s mklabel %s\n' %(d, p_d.Partition.dict[d]['partition_table'])
partitions = p_d.sort_partitions(p_d.Partition.dict, d, 'partition')
for p in partitions:
fs_type = ''
p_type = ''
flags = ''
set_flg = ''
if p_d.Partition.dict[d]['partition'][p]['from_os'] == 'yes':
continue
fs_type = p_d.Partition.dict[d]['partition'][p]['filesystem']
start = p_d.Partition.dict[d]['partition'][p]['start']
end = p_d.Partition.dict[d]['partition'][p]['end']
p_type = p_d.Partition.dict[d]['partition'][p]['type']
partition = p_d.Partition.dict[d]['partition'][p]['num']
flags = p_d.Partition.dict[d]['partition'][p]['flags']
mkpart = "%s mkpart %s %s %s %s" %(d, p_type, fs_type, start, end)
if flags.strip():
set_flg = "set %s %s on" %(partition, flags)
n += 1
args += "%s %s\n" %(mkpart, set_flg)
self.steps += n
return args
class Format(Operation):
''' class for format partition '''
def __init__(self, scr):
@@ -120,14 +160,21 @@ class Format(Operation):
self.return_value[127] = ('No tool to format partitions', u'没有格式化硬盘分区的工具')
def get_stdin(self):
format=''
n = 0
for instance in ri_data.MountPoint.dict.values():
if instance.format == "yes" and instance.filesystem != '':
format+="/dev/%s %s\n"%(instance.device,instance.filesystem)
n += 1
self.steps += n
return format
format = ''
n = 0
disks = p_d.Partition.dict.keys()
disks.sort()
for d in disks:
partitions = p_d.sort_partitions(p_d.Partition.dict, d, 'partition')
for p in partitions:
fs_type = p_d.Partition.dict[d]['partition'][p]['filesystem']
fmt = p_d.Partition.dict[d]['partition'][p]['format']
if fmt.strip() == 'yes' and fs_type.strip():
format += "%s %s\n" %(p, fs_type)
n += 1
self.steps += n
return format
class MakeRaid(Operation):
"""class for make raid"""
@@ -177,16 +224,18 @@ class Mount(Operation):
Operation.__init__(self,'Mount partition', u'挂载分区', 'mount_partition.sh',scr)
def get_stdin(self):
mount=''
mount = ''
n = 0
for dir in set([ m.directory for m in ri_data.MountPoint.dict.values() if m.directory ]):
for k in ri_data.MountPoint.dict.keys():
if ri_data.MountPoint.dict[k].directory == dir and ri_data.MountPoint.dict[k].filesystem:
# during configure fstab, use dict of Mount
Mount.dict[k]=dir
mount+='/dev/%s %s %s\n' %(k,dir,ri_data.MountPoint.dict[k].filesystem)
n+=1
break
disks = p_d.Partition.dict.keys()
disks.sort()
for d in disks:
partitions = p_d.sort_partitions(p_d.Partition.dict, d, 'partition')
for p in partitions:
mp = p_d.Partition.dict[d]['partition'][p]['mount_point']
fs = p_d.Partition.dict[d]['partition'][p]['filesystem']
if mp.strip() and fs.strip():
mount += "%s %s %s\n" %(p, mp, fs)
n += 1
self.steps += n
return mount
@@ -217,15 +266,18 @@ class ConfigureFstab(Mount):
def get_stdin(self):
fstab=''
# Note: Mount.dict are mount point. it isn't equal ri_data.MountPoint.dict
for k in Mount.dict.keys():
if ri_data.MountPoint.dict[k].filesystem != 'swap':
fstab += "/dev/%s %s %s\n" %(k,Mount.dict[k],ri_data.MountPoint.dict[k].filesystem)
for k in ri_data.MountPoint.dict.keys():
if ri_data.MountPoint.dict[k].filesystem == 'swap':
fstab += '/dev/%s swap swap\n' %k
break
disks = p_d.Partition.dict.keys()
disks.sort()
for d in disks:
partitions = p_d.sort_partitions(p_d.Partition.dict, d, 'partition')
for p in partitions:
mp = p_d.Partition.dict[d]['partition'][p]['mount_point']
fs = p_d.Partition.dict[d]['partition'][p]['filesystem']
if fs.strip() == 'linux-swap':
fs = 'swap'
mp = 'swap'
if mp.strip() and fs.strip():
fstab += "%s %s %s\n" %(p, mp, fs)
# process fstab to sort
fstab_new = ''