add support to sort disk by path

Change-Id: I9d5bab1f16364e6cb53cf3cb74a3b24c70705d75
This commit is contained in:
xiaodongwang 2014-08-26 15:15:54 -07:00
parent afc8b44162
commit 3a75594da3
1 changed files with 68 additions and 13 deletions

View File

@ -7,31 +7,86 @@
#set $vgname = $hostname.split('.')[0]
#end if
declare -A disk_mapping
set \$(ls -l /dev/disk/by-path | awk '{print \$9; print \$11}')
let disk_mapping_nums=\$#/2
let disk_mapping_offset=0
echo "disk_mapping_nums: \$disk_mapping_nums" > /tmp/log
echo "disk_mapping_offset: \$disk_mapping_offset" >> /tmp/log
echo "disk_mapping: $*" >> /tmp/log
while [ \$disk_mapping_offset -lt \$disk_mapping_nums ];
do
let found_disk_type=0
#if $getVar('disk_type_only','') != ""
if expr match "\$1" ".*-${disk_type_only}-.*"; then
let found_disk_type=1
fi
#else
let found_disk_type=1
#end if
if [ \$found_disk_type -gt 0 ]; then
disk_name=\$(basename \$2)
disk_mapping[\$disk_name]=\$1
fi
let disk_mapping_offset=\$disk_mapping_offset+1
shift 2
done
for key in \${!disk_mapping[@]}; do
echo "\$key => \${disk_mapping[\$key]}" >> /tmp/log
done
declare -A disks
set \$(list-harddrives)
let disk_nums=\$#/2
let disk_offset=0
let found_disk_offset=0
while [ \$disk_offset -lt \$disk_nums ];
do
#if $getVar('partitions_only','') != ""
let found_disk=0
if [[ x"\${disk_mapping[\$1]}" == x"" ]]; then
echo "ignore disk \$1 since it is not in disk_mapping" >> /tmp/log
else
#if $getVar('partitions_only','') != ""
#for $partition_only in $partitions_only.split(',')
if expr match "\$1" "$partition_only"; then
disks[found_disk_offset]=\$1
let found_disk=1
fi
if expr match "\$1" "$partition_only"; then
disks[\$found_disk_offset]=\$1
let found_disk=1
else
echo "disk \$1 does not match $partition_only" >> /tmp/log
fi
#end for
#else
let found_disk=1
#end if
fi
if [ \$found_disk -gt 0 ]; then
echo "add disk \$1 in partitioning list" >> /tmp/log
disks[\$found_disk_offset]=/dev/disk/by-path/\${disk_mapping[\$1]}
let found_disk_offset=\$found_disk_offset+1
fi
#else
disks[found_disk_offset]=\$1
let found_disk_offset=\$found_disk_offset+1
#end if
let disk_offset=\$disk_offset+1
shift 2
done
let disk_nums=\$found_disk_offset
echo "disks \${disks[@]}" >> /tmp/log
#if $getVar('sort_disks', '') != ""
sorted_disks=(\$(printf '%s\n' \${disks[@]} | sort))
#else
sorted_disks=(\${disks[@]})
#end if
echo "sorted disks \${sorted_disks[@]}" >> /tmp/log
#if $getVar('start_from_disk', '') != ""
set \${sorted_disks[@]}
sorted_disks=(\${@:$start_from_disk})
echo "sorted disks begin from the $start_from_disk: \${sorted_disks[@]}" >> /tmp/log
#end if
#if $getVar('disk_num', '') != ""
set \${sorted_disks[@]}
sorted_disks=(\${@:1:$disk_num})
echo "sorted disks for $disk_num disks: \${sorted_disks[@]}" >> /tmp/log
#end if
let disk_nums=\${#sorted_disks[@]}
echo "clearpart --all --initlabel" > /tmp/part-include
@ -41,8 +96,8 @@ echo "ignoredisk --only-use=$partitions_only" >> /tmp/part-include
#end if
#end if
echo "part /boot --fstype ext3 --size=100 --ondisk=\${disks[0]} --asprimary" >> /tmp/part-include
echo "part swap --recommended --maxsize=128000 --ondisk=\${disks[0]}" >> /tmp/part-include
echo "part /boot --fstype ext3 --size=500 --ondisk=\${sorted_disks[0]} --asprimary" >> /tmp/part-include
echo "part swap --recommended --maxsize=128000 --ondisk=\${sorted_disks[0]}" >> /tmp/part-include
vggroup=''
let disk_offset=0
@ -50,7 +105,7 @@ while [ \$disk_offset -lt \$disk_nums ];
do
let pv_id=\$disk_offset+1
partname="pv.0\$pv_id"
echo "part \$partname --size=1 --grow --ondisk=\${disks[\$disk_offset]}" >> /tmp/part-include
echo "part \$partname --size=1 --grow --ondisk=\${sorted_disks[\$disk_offset]}" >> /tmp/part-include
vggroup="\$vggroup \$partname"
let disk_offset=\$disk_offset+1;
done