summaryrefslogtreecommitdiffstats
path: root/deploy/adapters/cobbler/snippets/kickstart_pre_partition_disks
diff options
context:
space:
mode:
Diffstat (limited to 'deploy/adapters/cobbler/snippets/kickstart_pre_partition_disks')
-rw-r--r--deploy/adapters/cobbler/snippets/kickstart_pre_partition_disks542
1 files changed, 542 insertions, 0 deletions
diff --git a/deploy/adapters/cobbler/snippets/kickstart_pre_partition_disks b/deploy/adapters/cobbler/snippets/kickstart_pre_partition_disks
new file mode 100644
index 00000000..6b1c9ce3
--- /dev/null
+++ b/deploy/adapters/cobbler/snippets/kickstart_pre_partition_disks
@@ -0,0 +1,542 @@
+#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
+declare -A disk_path_mapping
+declare -A ignore_disk_mapping
+declare -A ignore_disk_path_mapping
+if [ -e /dev/disk/by-path ]; then
+ 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
+ path_name=\$(basename \$1)
+ disk_name=\$(basename \$2)
+ let disk_mapping_offset=\$disk_mapping_offset+1
+ shift 2
+
+ if [ \$found_disk_type -gt 0 ]; then
+ disk_mapping[\${disk_name}]="/dev/disk/by-path/\${path_name}"
+ disk_mapping[\${path_name}]="/dev/disk/by-path/\${path_name}"
+ disk_path_mapping[\${disk_name}]="/dev/\${disk_name}"
+ disk_path_mapping[\${path_name}]="/dev/\${disk_name}"
+ else
+ ignore_disk_mapping[\${disk_name}]="/dev/disk/by-path/\${path_name}"
+ ignore_disk_mapping[\${path_name}]="/dev/disk/by-path/\${path_name}"
+ ignore_disk_path_mapping[\${disk_name}]="/dev/\${disk_name}"
+ ignore_disk_path_mapping[\${path_name}]="/dev/\${disk_name}"
+ fi
+ done
+
+ for key in \${!disk_mapping[@]}; do
+ echo "disk mapping \$key => \${disk_mapping[\$key]}" >> /tmp/log
+ done
+
+ for key in \${!disk_path_mapping[@]}; do
+ echo "disk path mapping \$key => \${disk_path_mapping[\$key]}" >> /tmp/log
+ done
+else
+ echo "/dev/disk/by-path does not exist" >> /tmp/log
+fi
+
+declare -A partition_disks
+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
+ disk=\$1
+ disk_name=\$(basename \$disk)
+ let offset=\${disk_offset}
+ let disk_offset=\${disk_offset}+1
+ shift 2
+ if [[ x"\${disk_mapping[\${disk_name}]}" == x"" ]]; then
+ if [[ x"\${ignore_disk_mapping[\${disk_name}]}" != x"" ]]; then
+ echo "ignore disk \${disk_name} since it is not in disk_mapping" >> /tmp/log
+ continue
+ else
+ echo "did not found disk path for \$disk but it is not ignored" >> /tmp/log
+ disk_mapping[\${disk_name}]="/dev/\${disk_name}"
+ disk_path_mapping[\${disk_name}]="/dev/\${disk_name}"
+ fi
+ fi
+ let found_disk=0
+
+#if $getVar('partition_by_path', '0') != "0"
+ disk=\${disk_mapping[\${disk_name}]}
+#end if
+ disks[\$offset]=\$disk
+
+#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
+ partition_disks[\${found_disk_offset}]=\$disk
+ let found_disk_offset=\${found_disk_offset}+1
+ fi
+done
+echo "partition disks \${partition_disks[@]}" >> /tmp/log
+echo "disks \${disks[@]}" >> /tmp/log
+
+#if $getVar('sort_disks', '0') != "0"
+sorted_disks=(\$(printf '%s\n' \${partition_disks[@]} | sort))
+#else
+sorted_disks=(\${partition_disks[@]})
+#end if
+echo "sorted disks \${sorted_disks[@]}" >> /tmp/log
+
+#if $getVar('start_from_disk', '') != ""
+ #set $start_from_disk = $int($start_from_disk)
+ #if $start_from_disk > 0
+ #set $disk_start_offset = $start_from_disk - 1
+ #else
+ #set $disk_start_offset = 0
+ #end if
+set \${sorted_disks[@]}
+shift $disk_start_offset
+unset sorted_disks
+sorted_disks=(\$@)
+echo "sorted disks begin from the $start_from_disk: \${sorted_disks[@]}" >> /tmp/log
+#end if
+
+#if $getVar('disk_num', '') != ""
+set \${sorted_disks[@]}
+unset sorted_disks
+sorted_disks=(\$(printf '%s\n' \$@ | head -n${disk_num}))
+echo "sorted disks for $disk_num disks: \${sorted_disks[@]}" >> /tmp/log
+#end if
+
+first_disk=""
+for disk in \${sorted_disks}; do
+ if [ -z "\${first_disk}" ]; then
+ first_disk=\${disk}
+ break
+ fi
+done
+echo "first disk \${first_disk}" >> /tmp/log
+
+let disk_nums=\${#sorted_disks[@]}
+sorted_disks_str=""
+for disk in \${sorted_disks[@]}; do
+ if [ -z "${sorted_disks_str}" ]; then
+ sorted_disks_str="\${disk}"
+ else
+ sorted_disks_str="\${sorted_disks_str},\${disk}"
+ fi
+done
+
+echo "clearpart --all --initlabel" > /tmp/part-include
+
+declare -A remove_disks
+let remove_disk_offset=0
+#if $getVar('keep_old_partitions', '0') != "0"
+for disk in \${sorted_disks[@]}; do
+ dd if=/dev/zero of=\${disk} bs=512 count=1
+ remove_disks[\${remove_disk_offset}]=\$disk
+ let remove_disk_offset=\${remove_disk_offset}+1
+done
+echo "only partition \$sorted_disks_str" >> /tmp/log
+echo "ignoredisk --only-use=\$sorted_disks_str" >> /tmp/part-include
+#else
+for disk in \${disks[@]}; do
+ dd if=/dev/zero of=\${disk} bs=512 count=1
+ remove_disks[\${remove_disk_offset}]=\$disk
+ let remove_disk_offset=\${remove_disk_offset}+1
+done
+#end if
+echo "remove disks \${remove_disks[@]}" >> /tmp/log
+
+disk_partitions=\$(pvs --noheadings --separator :| cut -d: -f1)
+remove_partitions=""
+remove_vgs=""
+for disk_partition in \${disk_partitions}; do
+ vg=\$(pvs --noheadings --separator : \${disk_partition} | cut -d: -f2)
+ remove_vg=""
+ remove_partition=""
+ for remove_disk in \${remove_disks[@]}; do
+#if $getVar('partition_by_path', '0') != "0"
+ path_name=\$(basename \${remove_disk})
+ remove_disk_path=\${remove_disk}
+ remove_disk=\${disk_path_mapping[\${path_name}]}
+#else
+ disk_name=\$(basename \${remove_disk})
+ remove_disk_path=\${disk_mapping[\${disk_name}]}
+#end if
+ if [ -z "\${remove_disk}" ]; then
+ continue
+ fi
+ if [ -z "\${remove_disk_path}" ]; then
+ continue
+ fi
+ if expr match "\${disk_partition}" "\${remove_disk_path}.*"; then
+ remove_vg="\$vg"
+ remove_partition="\${disk_partition}"
+ else
+ echo "partition \${disk_partition} does not match \${remove_disk_path}.*" >> /tmp/log
+ fi
+ if expr match "\${disk_partition}" "\${remove_disk}.*"; then
+ remove_vg="\$vg"
+ remove_partition="\${disk_partition}"
+ else
+ echo "partition \${disk_partition} does not match \${remove_disk}.*" >> /tmp/log
+ fi
+ if [[ "\$vg" == "$vgname" ]]; then
+ remove_vg="\$vg"
+ remove_partition="\${disk_partition}"
+ fi
+ done
+ if [ ! -z "\${remove_vg}" ]; then
+ if [ -z "\${remove_vgs}" ]; then
+ remove_vgs="\${remove_vg}"
+ else
+ vg_removed=0
+ for vg in \${remove_vgs}; do
+ if [[ "\$vg" == "\${remove_vg}" ]]; then
+ vg_removed=1
+ fi
+ done
+ if [ \${vg_removed} -eq 0 ]; then
+ remove_vgs="\${remove_vgs} \${remove_vg}"
+ fi
+ fi
+ fi
+ if [ ! -z "\${remove_partition}" ]; then
+ if [ -z "\${remove_partitions}" ]; then
+ remove_partitions="\${remove_partition}"
+ else
+ pv_removed=0
+ for pv in ${remove_partitions}; do
+ if [[ "\$pv" == "\${remove_partition}" ]]; then
+ pv_removed=1
+ fi
+ done
+ if [ \${pv_removed} -eq 0 ]; then
+ remove_partitions="\${remove_partitions} \${remove_partition}"
+ fi
+ fi
+ fi
+done
+
+echo "remove vgs \${remove_vgs}" >> /tmp/log
+for remove_vg in \${remove_vgs}; do
+ vgremove -f \${remove_vg}
+done
+
+echo "remove partitions \${remove_partitions} from \${remove_vgs}" >> /tmp/log
+for remove_partition in \${remove_partitions}; do
+ pvremove -ff -y \${remove_partition}
+done
+
+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
+reserve_disks_size[${disk_name}]=${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
+max_disks_size[${disk_name}]=${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 /
+ #continue
+ #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]}
+#if $os_version == "rhel7"
+echo "bootloader --location=mbr --boot-drive=\${sorted_disks[0]}" >> /tmp/part-include
+#else
+echo "bootloader --location=mbr --driveorder=\${sorted_disks[0]}" >> /tmp/part-include
+#end if
+echo "zerombr" >> /tmp/part-include
+echo "part biosboot --fstype=biosboot --size=1 --ondisk=\${sorted_disks[0]} --asprimary" >> /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]} --asprimary" >> /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=''
+let disk_nums=\${#sorted_disks[@]}
+let disk_offset=0
+while [ \${disk_offset} -lt \${disk_nums} ]; do
+ disk=\${sorted_disks[\${disk_offset}]}
+ let disk_offset=\$disk_offset+1;
+ let pv_id=\${disk_offset}
+ 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_disk_size}"
+ else
+ maxsize_param=""
+ fi
+ echo "part \$partname --size=1 --grow \${maxsize_param} --ondisk=\${disk}" >> /tmp/part-include
+ vggroup="\$vggroup \$partname"
+ 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
+done
+
+if [ ! -z "\$vggroup" ]; then
+ echo "volgroup $vgname \$vggroup" >> /tmp/part-include
+fi
+if [ ! -z "\${reserve_vggroup}" ]; then
+ echo "volgroup reserved \${reserve_vggroup}" >> /tmp/part-include
+fi
+
+declare -A sorted_partitions
+sorted_partitions[0]=\${default_partition}
+let sorted_partition_offset=1
+for key in \${!partitions_name[@]}; do
+ if [[ "\$key" != "\${default_partition}" ]]; then
+ sorted_partitions[\${sorted_partition_offset}]=\$key
+ let sorted_partition_offset=\${sorted_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=""
+ 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