compass-adapters/cobbler/snippets/kickstart_pre_partition_disks

402 lines
14 KiB
Plaintext

#set hostname=$getVar('hostname',None)
#set partition = $getVar('partition', None)
#set partition_size = $getVar('partition_size', None)
#set partition_maxsize = $getVar('partition_maxsize', None)
#set disk_reserve_size = $getVar('disk_reserve_size', None)
#set disk_max_size = $getVar('disk_max_size', None)
#set default_disk_reserve_size = $getVar('default_disk_reserve_size', '0')
#set default_disk_max_size = $getVar('default_disk_max_size', '0')
#if $hostname == None
#set $vgname = "VolGroup00"
#else
#set $vgname = $hostname.split('.')[0]
#end if
declare -A disk_mapping
set \$(ls -s -l /dev/disk/by-path | awk '{print \$10, \$12}')
let disk_mapping_nums=\$#/2
let disk_mapping_offset=0
echo "disk_mapping_nums: \$disk_mapping_nums" > /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 "disk mapping \$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
let found_disk=0
disk_name=\$(basename \$1)
#if $getVar('keep_old_partitions', '0') == "0"
dd if=/dev/zero of=/dev/\${disk_name} bs=512 count=1
#end if
if [[ x"\${disk_mapping[\${disk_name}]}" == x"" ]]; then
echo "ignore disk \$1 since it is not in disk_mapping" >> /tmp/log
let disk_offset=\$disk_offset+1
shift 2
continue
fi
#if $getVar('partitions_only', '') != ""
#for $partition_only in $partitions_only.split(',')
#if not $partition_only
#continue
#end if
if expr match "\${disk_name}" "$partition_only"; then
let found_disk=1
else
echo "disk \${disk_name} does not match $partition_only" >> /tmp/log
fi
#end for
#else
let found_disk=1
#end if
if [ \$found_disk -gt 0 ]; then
echo "add disk \${disk_name} in partitioning list" >> /tmp/log
#if $getVar('partition_by_path', '0') != "0"
disks[\$found_disk_offset]=/dev/disk/by-path/\${disk_mapping[\${disk_name}]}
#else
disks[\$found_disk_offset]=/dev/\${disk_name}
#end if
let found_disk_offset=\$found_disk_offset+1
fi
let disk_offset=\$disk_offset+1
shift 2
done
echo "disks \${disks[@]}" >> /tmp/log
#if $getVar('sort_disks', '0') != "0"
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[@]}
sorted_disks_str=""
for disk in \${sorted_disks[@]}; do
sorted_disks_str="\${sorted_disks_str},\${disk}"
done
echo "clearpart --all --initlabel" > /tmp/part-include
#if $getVar('keep_old_partitions', '0') != "0"
for disk in \${sorted_disks[@]}; do
dd if=/dev/zero of=\${disk} bs=512 count=1
done
echo "only partition \$sorted_disks_str" >> /tmp/log
echo "ignoredisk --only-use=\$sorted_disks_str" >> /tmp/part-include
#end if
declare -A reserve_disks_size
#if $disk_reserve_size != None
#set disk_sizes = [disk_size.strip() for disk_size in $disk_reserve_size.split(';') if disk_size.strip()]
#for disk_and_size in $disk_sizes
#set disk_name, size = $disk_and_size.split(' ', 1)
#set disk_name = $disk_name.strip()
#if $size.endswith('K')
#set disk_size = $int($size[:-1]) / 1000
#elif size.endswith('M')
#set disk_size = $int($size[:-1])
#elif $size.endswith('G')
#set disk_size = $int($size[:-1]) * 1000
#elif $size.endswith('T')
#set disk_size = $int($size[:-1]) * 1000000
#else
#set disk_size = $int($size)
#end if
#if $getVar('partition_by_path', '0') != "0"
disk=/dev/disk/by-path/\${disk_mapping[\${disk_name}]}
#else
disk=/dev/${disk_name}
#end if
reserve_disks_size[\$disk]=${disk_size}
#end for
#end if
#if $default_disk_reserve_size.endswith('K')
#set disk_size = $int($default_disk_reserve_size[:-1]) / 1000
#elif $default_disk_reserve_size.endswith('M')
#set disk_size = $int($default_disk_reserve_size[:-1])
#elif $default_disk_reserve_size.endswith('G')
#set disk_size = $int($default_disk_reserve_size[:-1]) * 1000
#elif $default_disk_reserve_size.endswith('T')
#set disk_size = $int($default_disk_reserve_size[:-1]) * 1000000
#else
#set disk_size = $int($default_disk_reserve_size)
#end if
default_reserve_disk_size=${disk_size}
declare -A max_disks_size
#if $disk_max_size != None
#set disk_sizes = [disk_size.strip() for disk_size in $disk_max_size.split(';') if disk_size.strip()]
#for disk_and_size in $disk_sizes
#set disk_name, size = $disk_and_size.split(' ', 1)
#set disk_name = $disk_name.strip()
#if $size.endswith('K')
#set disk_size = $int($size[:-1]) / 1000
#elif $size.endswith('M')
#set disk_size = $int($size[:-1])
#elif $size.endswith('G')
#set disk_size = $int($size[:-1]) * 1000
#elif $size.endswith('T')
#set disk_size = $int($size[:-1]) * 1000000
#else
#set disk_size = $int($size)
#end if
#if $getVar('partition_by_path', '0') != "0"
disk=/dev/disk/by-path/\${disk_mapping[\${disk_name}]}
#else
disk=/dev/${disk_name}
#end if
max_disks_size[\$disk]=${disk_size}
#end for
#end if
#if $default_disk_max_size.endswith('K')
#set disk_size = $int($default_disk_max_size[:-1]) / 1000
#elif $default_disk_max_size.endswith('M')
#set disk_size = $int($default_disk_max_size[:-1])
#elif $default_disk_max_size.endswith('G')
#set disk_size = $int($default_disk_max_size[:-1]) * 1000
#elif $default_disk_max_size.endswith('T')
#set disk_size = $int($default_disk_max_size[:-1]) * 1000000
#else
#set disk_size = $int($default_disk_max_size)
#end if
default_max_disk_size=${disk_size}
declare -A partitions_percentage
declare -A partitions_name
declare -A partitions_size
declare -A partitions_maxsize
#if $partition != None
#set vol_sizes = [part.strip() for part in $partition.split(';') if part.strip()]
#for vol_and_size in $vol_sizes
#set vol, vol_size = $vol_and_size.split(' ', 1)
#set vol = $vol.strip()
#if $vol == '/'
#set volname = 'root'
#elif $vol == 'swap'
#set volname = 'swap'
#elif $vol.startswith('/')
#set volname = $vol[1:].replace('/', '_')
#else
#set volname = ''
# $vol is not starts with /
#end if
partitions_name[$vol]=$volname
#set vol_size = $vol_size.strip()
#if $vol_size.endswith('%'):
#set vol_percent = $vol_size[:-1]
partitions_percentage[$vol]=${vol_percent}
#else
#if $vol_size.endswith('K')
#set vol_min_size = $int($vol_size[:-1]) / 1000
#elif $vol_size.endswith('M')
#set vol_min_size = $int($vol_size[:-1])
#elif $vol_size.endswith('G')
#set vol_min_size = $int($vol_size[:-1]) * 1000
#elif $vol_size.endswith('T')
#set vol_min_size = $int($vol_size[:-1]) * 1000000
#else
#set vol_min_size = $int($vol_size)
#end if
partitions_size[$vol]=${vol_min_size}
#end if
#end for
#end if
#if $partition_size != None
#set vol_sizes = [part.strip() for part in $partition_size.split(';') if part.strip()]
#for vol_and_size in $vol_sizes
#set vol, vol_size = $vol_and_size.split(' ', 1)
#set vol = $vol.strip()
#if $vol_size.endswith('K')
#set vol_min_size = $int($vol_size[:-1]) / 1000
#elif $vol_size.endswith('M')
#set vol_min_size = $int($vol_size[:-1])
#elif $vol_size.endswith('G')
#set vol_min_size = $int($vol_size[:-1]) * 1000
#elif $vol_size.endswith('T')
#set vol_min_size = $int($vol_size[:-1]) * 1000000
#else
#set vol_min_size = $int($vol_size)
#end if
partitions_size[$vol]=${vol_min_size}
#end for
#end if
#if $partition_maxsize != None
#set vol_sizes = [part.strip() for part in $partition_maxsize.split(';') if part.strip()]
#for vol_and_size in $vol_sizes
#set vol, vol_size = $vol_and_size.split(' ', 1)
#set vol = $vol.strip()
#if $vol_size.endswith('K')
#set vol_max_size = $int($vol_size[:-1]) / 1000
#elif $vol_size.endswith('M')
#set vol_max_size = $int($vol_size[:-1])
#elif $vol_size.endswith('G')
#set vol_max_size = $int($vol_size[:-1]) * 1000
#elif $vol_size.endswith('T')
#set vol_max_size = $int($vol_size[:-1]) * 1000000
#else
#set vol_max_size = $int($vol_size)
#end if
partitions_maxsize[$vol]=${vol_max_size}
#end for
#end if
default_partition=$getVar('default_partition', '/')
partition_fstype=$getVar('partition_fstype', 'ext3')
for key in \${!partitions_name[@]}; do
echo "partition names \$key => \${partitions_name[\$key]}" >> /tmp/log
done
for key in \${!partitions_percentage[@]}; do
echo "partition percentage \$key => \${partitions_percentage[\$key]}" >> /tmp/log
done
for key in \${!partitions_size[@]}; do
echo "partition min size \$key => \${partitions_size[\$key]}" >> /tmp/log
done
echo "default partition \${default_partition}" >> /tmp/log
echo "partition fstype \${partition_fstype}" >> /tmp/log
for key in \${!partitions_maxsize[@]}; do
echo "partition max size \$key => \${partitions_maxsize[\$key]}" >> /tmp/log
done
partition_size=\${partitions_size[/boot]:-500}
unset \${partitions_name[/boot]}
echo "bootloader --location=mbr --driveorder=\${sorted_disks[0]}" >> /tmp/part-include
echo "zerombr" >> /tmp/part-include
echo "part biosboot --fstype=biosboot --size=1 --ondisk=\${sorted_disks[0]}" >> /tmp/part-include
echo "part /boot --fstype=\${partition_fstype} --size=\${partition_size} --ondisk=\${sorted_disks[0]} --asprimary" >> /tmp/part-include
partition_size=\${partitions_size[swap]:-0}
if [[ "\$partition_size" == "0" ]]; then
partition_maxsize=\${partitions_maxsize[swap]:-128000}
echo "part swap --recommended --maxsize=\${partition_maxsize} --ondisk=\${sorted_disks[0]}" >> /tmp/part-include
else
echo "part swap --size=\${partition_size} --ondisk=\${sorted_disks[0]}" >> /tmp/part-include
fi
unset \${partitions_name[swap]}
if [[ x"\${partitions_name[/]}" == x"" ]]; then
partitions_name[/]="root"
fi
echo "partition disks" >> /tmp/log
vggroup=''
reserve_vggroup=''
let disk_nums=\${#sorted_disks[@]}
let disk_offset=0
while [ \${disk_offset} -lt \${disk_nums} ]; do
let pv_id=\${disk_offset}+1
disk=\${sorted_disks[\${disk_offset}]}
if [ ! -z "\${reserve_disks_size[\$disk]}" ]; then
reserve_disk_size=\${reserve_disks_size[\$disk]}
else
reserve_disk_size=\${default_reserve_disk_size}
fi
echo "reserve \${reserve_disk_size} on \${disk}" >> /tmp/log
if [ \${reserve_disk_size} -gt 0 ]; then
reserve_partname="pv.1\${pv_id}"
echo "part \${reserve_partname} --size=\${reserve_disk_size} --ondisk=\${disk}" >> /tmp/part-include
reserve_vggroup="\${reserve_vggroup} \${reserve_partname}"
fi
partname="pv.0\${pv_id}"
if [ ! -z "\${max_disks_size[\${disk}]}" ]; then
max_disk_size=\${max_disks_size[\${disk}]}
else
max_disk_size=\${default_max_disk_size}
fi
echo "partition \${disk} max size \${max_disk_size}" >> /tmp/log
if [ \${max_disk_size} -gt 0 ]; then
maxsize_param="--maxsize=\${max_disks_size[\${disk}]}"
else
maxsize_param=""
fi
echo "part \$partname --size=1 --grow \${maxsize_param} --ondisk=\${disk}" >> /tmp/part-include
vggroup="\$vggroup \$partname"
let disk_offset=\$disk_offset+1;
done
if [ ! -z "\${reserve_vggroup}" ]; then
echo "volgroup reserved \${reserve_vggroup}" >> /tmp/part-include
fi
if [ ! -z "\$vggroup" ]; then
echo "volgroup $vgname \$vggroup" >> /tmp/part-include
fi
declare -A sorted_partitions
sorted_partitions[0]=\${default_partition}
partition_offset=1
for key in \${!partitions_name[@]}; do
if [[ "\$key" != "\${default_partition}" ]]; then
sorted_partitions[\${partition_offset}]=\$key
let partition_offset=\${partition_offset}+1
fi
done
for key in \${sorted_partitions[@]}; do
partition_name=\${partitions_name[\$key]}
if [[ "\$key" == "\${default_partition}" ]]; then
grow_param="--grow"
else
grow_param=""
fi
partition_percentage=\${partitions_percentage[\$key]}
if [[ x"\${partition_percentage}" != x"" ]]; then
percentage_param="--percent=\${partition_percentage}"
grow_param="--grow"
else
percentage_param=""
fi
partition_size=\${partitions_size[\$key]}
if [[ x"\${partition_size}" != x"" ]]; then
size_param="--size=\${partition_size}"
else
size_param="--size=1"
fi
partition_maxsize=\${partitions_maxsize[\$key]}
if [[ x"\${partition_maxsize}" != x"" ]]; then
maxsize_param="--maxsize=\${partition_maxsize}"
else
maxsize_param=""
fi
echo "logvol \$key --fstype=\${partition_fstype} --vgname=$vgname \${percentage_param} \${size_param} \${maxsize_param} \${grow_param} --name=\${partition_name}vol" >> /tmp/part-include
done