From 3a75594da3ec793b47074ef143a97ecfe3836480 Mon Sep 17 00:00:00 2001 From: xiaodongwang <xiaodongwang@huawei.com> Date: Tue, 26 Aug 2014 15:15:54 -0700 Subject: [PATCH] add support to sort disk by path Change-Id: I9d5bab1f16364e6cb53cf3cb74a3b24c70705d75 --- .../snippets/kickstart_pre_partition_disks | 81 ++++++++++++++++--- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/cobbler/snippets/kickstart_pre_partition_disks b/cobbler/snippets/kickstart_pre_partition_disks index dd4fdd1..e857bc5 100644 --- a/cobbler/snippets/kickstart_pre_partition_disks +++ b/cobbler/snippets/kickstart_pre_partition_disks @@ -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