#version=RHEL9

%pre --log=/root/ks-pre.log.1
# Custom pre-kickstart block
#!/bis/bash
# list-harddrives output
DISKS_RAW=($(list-harddrives | tr "\n" ' '))
# DISKS_RAW=($(echo 'sda 2000000 sdb 2000000 sdc 200000 sdd 200000 sde 200000 sdf 200000'))
DISKS=()
SIZES=()
DISK_GROUPS=()
MIN_DISKS=()
RAID_LEVEL=NO_RAID
PARTITIONS_INCLUDE='/tmp/part-include'
# Parse list-harddrives
# DISKS_RAW=($(echo "${DISKS_RAW[@]}" | tr ' ' '\n'))
for i in "${!DISKS_RAW[@]}"
do
	if (( $i % 2 )); then
		SIZES+=(${DISKS_RAW[$i]%.*})
	else
		DISKS+=(${DISKS_RAW[$i]})
	fi
done

# Show Disks
for i in "${!DISKS[@]}"
do
	echo ${DISKS[$i]} ${SIZES[$i]}
done

# Find minimal size group
SIZE_MIN=${SIZES[0]}
for i in "${SIZES[@]}"
do
	(( i < SIZE_MIN )) && SIZE_MIN=$i
done
echo minimal_size: $SIZE_MIN

# Find all drives with minimal size
for i in "${!DISKS[@]}"
do
   if [[ "${SIZES[$i]}" = "${SIZE_MIN}" ]]; then
       MIN_DISKS+=(${DISKS[$i]})
   fi
done

# Set Drives for OS installation
OS_DRIVES=("${MIN_DISKS[@]}")
if [[ !$(( ${#OS_DRIVES[@]} % 2 )) -eq 0 && ${#OS_DRIVES[@]} -gt 1 ]]; then
	echo Drive ${OS_DRIVES[${#OS_DRIVES[@]}-1]} has been removed from OS drives
	unset OS_DRIVES[${#OS_DRIVES[@]}-1]
fi
OS_DRIVES_COUNT=${#OS_DRIVES[@]}

# Set RAID level
if [ $OS_DRIVES_COUNT -eq 2 ]; then
	RAID_LEVEL=1
elif [[ $OS_DRIVES_COUNT -eq 4 || $OS_DRIVES_COUNT -gt 4 ]]; then
	RAID_LEVEL=10
fi

echo Disks_for_OS: "${OS_DRIVES[@]}"
echo Drives_count: $OS_DRIVES_COUNT
echo Raid_level: $RAID_LEVEL

# Exit if no drives found
if [ $OS_DRIVES_COUNT -eq 0 ]; then
	echo No drives found
	exit 1
fi

# Create part-include file
echo '# Partitions layout' > $PARTITIONS_INCLUDE

# Clear partitions
OS_DRIVES_STR=$(echo ${OS_DRIVES[@]} | tr ' ' ',')
echo "Clearing partitions on the drives $OS_DRIVES_STR"
echo "clearpart --initlabel --drives=$OS_DRIVES_STR --all" >> $PARTITIONS_INCLUDE
echo "zerombr" >> $PARTITIONS_INCLUDE

# Set bootloader
echo "bootloader --append=\"crashkernel=auto rhgb quiet\" --location=mbr --boot-drive=${OS_DRIVES[0]}" >> $PARTITIONS_INCLUDE

if [ $RAID_LEVEL == 'NO_RAID' ]; then
	# Create partitions layout
	echo "part /boot --size 1025 --asprimary --fstype='ext4' --ondrive=${OS_DRIVES[0]}" >> $PARTITIONS_INCLUDE
	echo "part /boot/efi --size 1025 --fstype='efi' --fsoptions='umask=0077,shortname=winnt' --label=BOOTEFI --ondrive=${OS_DRIVES[0]}" >> $PARTITIONS_INCLUDE
	echo "part pv.os --size 102400 --fstype='lvmpv' --ondrive=${OS_DRIVES[0]} --label=PVOS --grow" >> $PARTITIONS_INCLUDE
else
	# Create RAID layout
	RAID_INCREMENT=1
	BOOT_RAID=()
	EFI_RAID=()
	PV_RAID=()
	# Creating RAID partitions
	for DRIVE in "${OS_DRIVES[@]}"
	do
		echo "part raid.$RAID_INCREMENT --fstype='mdmember' --size=1025 --ondisk=$DRIVE" >> $PARTITIONS_INCLUDE
		BOOT_RAID+=("raid.$RAID_INCREMENT")
		RAID_INCREMENT=$((RAID_INCREMENT+1))

		echo "part raid.$RAID_INCREMENT --fstype='mdmember' --size=1025 --ondisk=$DRIVE" >> $PARTITIONS_INCLUDE
		EFI_RAID+=("raid.$RAID_INCREMENT")
		RAID_INCREMENT=$((RAID_INCREMENT+1))

		echo "part raid.$RAID_INCREMENT --fstype='mdmember' --size=128000 --grow --ondisk=$DRIVE" >> $PARTITIONS_INCLUDE
		PV_RAID+=("raid.$RAID_INCREMENT")
		RAID_INCREMENT=$((RAID_INCREMENT+1))
	done

	# Building RAIDs
	echo "raid /boot --device=boot --fstype='ext4' --level=$RAID_LEVEL --label=BOOT ${BOOT_RAID[@]}" >> $PARTITIONS_INCLUDE
	echo "raid /boot/efi --device=boot_efi --fstype='efi' --level=$RAID_LEVEL --fsoptions='umask=0077,shortname=winnt' --label=BOOTEFI ${EFI_RAID[@]}" >> $PARTITIONS_INCLUDE
	echo "raid pv.os --device=pv.os --fstype='lvmpv' --level=$RAID_LEVEL --label=PVOS ${PV_RAID[@]}" >> $PARTITIONS_INCLUDE
fi

# LVM layout part is included in dynamic_partitioning.j2
# LVM layout
cat << EOF >> $PARTITIONS_INCLUDE
volgroup vg.os --pesize=4096 pv.os
logvol swap --fstype="swap" --size=5080 --label="SWAP" --name=swap --vgname=vg.os
logvol /home --fstype="ext4" --size=5080 --label="HOME" --name=home --vgname=vg.os
logvol /var/log --fstype="ext4" --size=6440 --label="VARLOG" --name=var_log --vgname=vg.os
logvol / --fstype="ext4" --size=15200 --label="ROOT" --name=root --vgname=vg.os
EOF

%end

# install from URL
url --url http://dl.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/

# Setting up authentication and keyboard
keyboard --vckeymap=us --xlayouts=us

# Setting up language
lang en_US.UTF-8

# Turning on text-mode installation --non-interactive could be added
text

# Run the Setup Agent on first boot
firstboot --disable

# Network settings


# Include partitions config
%include /tmp/part-include

# Root password managment
rootpw --lock

# System services
services --disabled="chronyd"

# Do not configure the X Window System
skipx

# System timezone
timezone Etc/GMT --isUtc

# System authorization information
    user --groups="wheel" --name="osadmin" --password="$6$install_pass$uxOzcl5uOPdnPnsJmXaebr0oheLbie984yWf25wf643xMmAg0QhLiNzEPrCWaOlbeh/xv5XBAFwub.O18r77P/" --iscrypted --gecos="osadmin"

# Disable firewall
firewall --disabled

# Selinux State
selinux --disabled

%packages
@^minimal-environment
@core
wget
kexec-tools
kexec-tools
python3
python3-pip
python39
git
vim-enhanced
pciutils
%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

# Reboot after installing
reboot

%post --interpreter /bin/bash --log=/root/ks-post.log.1
mkdir -p /root/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGRd4HZJ/vu3/XUMPcSkssBme6P08xeZhmfwTzSjW+3+wu4pMvjpTs+rYGhXdI9IPU5+4g2PoXl00N4j+8uzUQgnil74PI0Uc9XdKUiagfgQ+QZDy0w3VLCBdBNf9rvzbr62grJKRBoxwRsybFZe6RfKRmVrKJwVmPby2dqKVt0agC1DTWGfURFgzG+rkPlu7e1H+a0lrXWipW1IPX7r+tAHtNyf4Y8dMsz3tQpHHXP2fS+LsuKy2QSG6NoCzPF3zk4+fb+CK2QREKvgQwsXFMOzwVgmgEZbxaxfyvfo85PnVYxXtQwATZ/NvtLiFrwUNkwcuQ6l/D/ipyPfZkzEJr michaels@uk2group.com" >> /root/.ssh/authorized_keys
echo "ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAEvHK4PXSE8TpXFYZnEmrVNiuNmHdDXaPp5OwBh2ncZv4+42DfL3aiAp4qUOArwzEVRTSEmOFlRyg8sJgeh2/ZN6AGcEsz/lG890/JcFE8Hl429SICa92dC+KpIcTnTrxE5Kv+C4eCF4oHjsY74iC8WeNlig0nC7E3m765cziZqzpX0ig== danny.webb@thehutgroup.com" >> /root/.ssh/authorized_keys
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDYJIcfI1Qx41rx95BSPISyAUhJVZwttW30t2gUX//VxqFr7diuNhIXzgoEbgh9DA3wmmDVQMpPBXg0TokVXJyVtPY/8Z/Myc17qgixTv5upOAt+XLFcXMhrPPpQSV9DvYMEQuFulMocUFpSDiB4HW4Vm48P0Q+Xqy5YiaDN1/Il0IpeJ7RQ9cmFIo+EPE8s9fivXeST3zloOr8h/UKCcO4TQXuHzXabCIR+4CIZ8fwdgqbHQrZ1/wLJ1W/q0D0uEEE+JTebsG2GxxOzq74yq4MHci1mDWvrk0khnxiK74pHlROvqWymqsSNuM7mpCxHqEYNZQAr88zMpTt9SdiLYaG7RoXExWKuxbPPEd2vLdjvDliVP+6dYiRWkX3exsRC5Q/zyvQnZxXrO309mVoTkNCUQGFKuKBJ+V+4NuC3EfoefxJbyOHnmPSrI8sVjRJ6STZ/PrXLnwPei/lAzHen8CRusTIuzVd1LqpEnRhIynysBY8iefi/lZ6Nl7/qjA5M/s= iain.stott@thehutgroup.com" >> /root/.ssh/authorized_keys
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCT/qNoGkPO0nRFo8vaWCaBNFI1kl+xarmZNE5q0eeqIkfGenA/jnZsIEv0K+v9xIaF5ENwG8GbdNV1hDbDwWTBJ7luGhuAzh6U8SmXhAghq4+KDCZJLhTTiw2vWA8cV0yxwEeI889QbS13YkIiNAHrDmLoY070TxtWijFaxakt6eewlVNCHePcw6SLCcurl4rvm0WdcwaWjOqFN3IHSAcXcpz2fPrwZIzklCUFb2TC9o7MQUhGInGZQaWqGmpos05dlVZiwQoTCPA/Tt7BDHCddrTLmW8dMF/O4HGOm6iti0rM76J843uv3ss3M6ZmwSNyq2yyWVccpd4Q/sF82Iyd" >> /root/.ssh/authorized_keys
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDj0iHuv/08E/embURKBIndgfxwpzXqSDbHTVLKpuovqvyMlc3gIphn+11BSB1eBODGRmoNOfkrOzDFkFIAAikR5dRx8pB3PvIOZwTdakMZysDLwSkM0DqLSBecTICcOQ+8xfqE47zP/SUZ/h/5bxKfGMSe8e19bMlbC9pEsCFnVq8Xmkk7CWz7saofyrnNftXcMSJ1ztabna3ZB6IkbVENWltFy87wy8ViDD9p890kwO8IKv5YS7alxHtl9FD7klJ7LATAqNl25HhXCXHaLj5VsDrvUHZiBaHjfAMpzFe/iS3V4ndWwl9RYPMU5rySMkHzIc+h8xdtVunkgBy47OtJ sahibs@thehutgroup.com" >> /root/.ssh/authorized_keys
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAgdaJe+hCegxiqCrp80GLF18jyHJoNbfk13R8GfJoHr bryce.nicholls92@thehutgroup.com" >> /root/.ssh/authorized_keys

# install --mode=700 -d /root/.ssh
# install --mode=700 /dev/null /root/.ssh/authorized_keys
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

# update OS
yum update -y


curl https://https://repo.thghosting.cloud/scripts/net_interface_discovery.py -o /usr/local/bin/net_interface_discovery.py
chmod 0740 /usr/local/bin/net_interface_discovery.py
python3 /usr/local/bin/net_interface_discovery.py -u -o eno -e uplink > /etc/udev/rules.d/91-persistent-net.rules

# BGP networking
hostnamectl set-hostname $(hostname)
yum install -y https://rpm.frrouting.org/repo/frr-8-repo-1-0.el9.noarch.rpm
yum install -y frr libyang frr-pythontools
mkdir -p /etc/frr/
curl https://repo.thghosting.cloud/bgp/frr/daemons -o /etc/frr//daemons
curl https://repo.thghosting.cloud/bgp/frr/frr-$(hostname).conf -o /etc/frr//frr.conf
chown -R frr.frr /etc/frr
chmod 640 /etc/frr//daemons /etc/frr//frr.conf
mkdir -p /etc/network
curl https://repo.thghosting.cloud/bgp/nmcli/nmcli_setup-$(hostname) -o /usr/local/bin/nmcli_setup
curl https://repo.thghosting.cloud/bgp/service_files/nmcli_setup.service -o /etc/systemd/system/nmcli_setup.service
curl https://repo.thghosting.cloud/bgp/dispatcher/21-nmcli-postup-$(hostname) -o /etc/NetworkManager/dispatcher.d/21-nmcli-postup
chmod 0764 /etc/NetworkManager/dispatcher.d/21-nmcli-postup
systemctl enable nmcli_setup.service
systemctl enable frr.service
# rm -rf /etc/sysconfig/network-scripts/*

# End post install section
%end

