You've already forked script-collection
432 lines
14 KiB
Bash
432 lines
14 KiB
Bash
#!/bin/bash
|
|
#set -vx
|
|
|
|
hosts=("1.1.1.1" "2.2.2.2" "3.3.3.3")
|
|
|
|
get_host_info() {
|
|
echo "Refreshing host info..."
|
|
for h in "${hosts[@]}"; do
|
|
virsh -c qemu+ssh://root@${h}/system pool-refresh --pool kvm_guests > /dev/null
|
|
virsh -c qemu+ssh://root@${h}/system pool-refresh --pool nvme_guests > /dev/null
|
|
virsh -c qemu+ssh://root@${h}/system pool-refresh --pool ISO > /dev/null
|
|
echo "+++++++++++++++++"
|
|
echo -e "Host ${h}\n"
|
|
echo "+++++++++++++++++"
|
|
virsh -c qemu+ssh://root@${h}/system list --all
|
|
done
|
|
echo "+++++++++++++++++"
|
|
echo "Disk Volumes"
|
|
echo "+++++++++++++++++"
|
|
virsh -c qemu+ssh://root@${hosts[0]}/system vol-list --pool kvm_guests --details
|
|
echo "+++++++++++++++++"
|
|
echo "nVME Volumes"
|
|
echo "+++++++++++++++++"
|
|
virsh -c qemu+ssh://root@${hosts[0]}/system vol-list --pool nvme_guests --details
|
|
echo "+++++++++++++++++"
|
|
echo "ISO Volumes"
|
|
echo "+++++++++++++++++"
|
|
virsh -c qemu+ssh://root@${hosts[0]}/system vol-list --pool ISO --details
|
|
$0
|
|
}
|
|
|
|
mass_startup(){
|
|
read -p "Which host?" KVM_HOST
|
|
guests=($(virsh -c qemu+ssh://root@${h}/system list --inactive | '/shut off/{print $2}'))
|
|
|
|
for g in "${guests[@]}"
|
|
do
|
|
virsh -c qemu+ssh://root@${h}/system start ${g}
|
|
done
|
|
}
|
|
|
|
migrate_domain(){
|
|
echo "Migration Types
|
|
1). Single Domain
|
|
2). Offline Domain
|
|
3). Mass Domain Migration
|
|
"
|
|
read -p "Select Migration Type: " MIG
|
|
if [ $MIG == 1 ]; then
|
|
read -p "Select source host. " SRC_URI
|
|
virsh -c qemu+ssh://root@${SRC_URI}/system list | '/running/{print $2}'
|
|
read -p "Select destination host. " DEST_URI
|
|
read -p "Select domain. " DOM
|
|
virsh -c qemu+ssh://root@${SRC_URI}/system migrate \
|
|
--domain $DOM \
|
|
--live \
|
|
--p2p \
|
|
--tunnelled \
|
|
--desturi qemu+ssh://root@${DEST_URI}/system \
|
|
--persistent \
|
|
--undefinesource \
|
|
--verbose
|
|
rerun
|
|
elif [ $MIG == 2 ]; then
|
|
read -p "Select source host. " SRC_URI
|
|
read -p "Select destination host. " DEST_URI
|
|
domain=($(virsh -c qemu+ssh://root@${SRC_URI}/system list --inactive | '/shut off/{print $2}'))
|
|
for dom in "${domain[@]}"; do
|
|
read -p "Select destination host. " DEST_URI
|
|
virsh -c qemu+ssh://root@${SRC_URI}/system migrate \
|
|
--domain $DOM \
|
|
--live \
|
|
--p2p \
|
|
--tunnelled \
|
|
--desturi qemu+ssh://root@${DEST_URI}/system \
|
|
--persistent \
|
|
--undefinesource \
|
|
--verbose
|
|
rerun
|
|
done
|
|
elif [ $MIG == 3]; then
|
|
read -p "Select source host. " SRC_URI
|
|
read -p "Select destination host. " DEST_URI
|
|
domain=($(virsh -c qemu+ssh://root@${SRC_URI}/system list | '/running/{print $2}'))
|
|
for dom in "${domain[@]}"; do
|
|
read -p "Select destination host. " DEST_URI
|
|
virsh -c qemu+ssh://root@${SRC_URI}/system migrate \
|
|
--domain $DOM \
|
|
--live \
|
|
--p2p \
|
|
--tunnelled \
|
|
--desturi qemu+ssh://root@${DEST_URI}/system \
|
|
--persistent \
|
|
--undefinesource \
|
|
--verbose
|
|
done
|
|
else
|
|
echo "Invalid type..."
|
|
$0
|
|
fi
|
|
$0
|
|
}
|
|
|
|
backup_guest () {
|
|
read -p "Enter the desired host: " KVM_HOST
|
|
# declare/initialize global array
|
|
guests=($(virsh -c qemu+ssh://root@${KVM_HOST}/system list | awk '/running/{print $2}'))
|
|
|
|
# global variables
|
|
SNAP_DEST=/mnt/snap/
|
|
CPY_DEST=/mnt/backup/
|
|
|
|
for n in "${guests[@]}"
|
|
do
|
|
# initialize block storage array list and sets array variable
|
|
blks=($(virsh -c qemu+ssh://root@${KVM_HOST}/system domblklist --domain ${n} | awk '/vda/{print $2}'))
|
|
BLK_CALL=$(echo ${blks[0]})
|
|
# create external snapshot
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system snapshot-create-as --domain ${n} --name ${n} --diskspec vda,file=${SNAP_DEST}${n}.qcow2 \
|
|
--disk-only --atomic --no-metadata --quiesce | logger -t guest_snap
|
|
# syncs with backup destination
|
|
rsync -azq ${BLK_CALL} ${CPY_DEST}${n} | logger -t guest_sync
|
|
# active blockcommit
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system blockcommit --domain ${n} vda --active --pivot --verbose | logger -t guest_pivot
|
|
rm -rf ${SNAP_DEST}${n}.qcow2
|
|
done
|
|
$0
|
|
}
|
|
|
|
test_node(){
|
|
read -p "Enter the desired host: " KVM_HOST
|
|
read -p "Enter the name of guest: " GUEST
|
|
read -p "Enter OS 1). AlmaLinux 10 2). Debian 13 " OS_CHO
|
|
if [ $OS_CHO == 1 ]; then
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool kvm_guests --name ${GUEST} --format qcow2 --capacity 500G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
echo "local-hostname: ${GUEST}" > ./meta-data
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 2 \
|
|
--memory 2048 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_servers \
|
|
--disk /mnt/kvm_guests/$GUEST \
|
|
--cloud-init user-data=./user-data/cloud-init-configs/alma-node.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
elif [ $OS_CHO == 2 ]; then
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool kvm_guests --name ${GUEST} --format qcow2 --capacity 500G --backing-vol /mnt/iso/debian-13-genericcloud-amd64-20250806-2196.qcow2 --backing-vol-format qcow2
|
|
echo "local-hostname: ${GUEST}" > ./meta-data
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 2 \
|
|
--memory 2048 \
|
|
--os-variant debian13 \
|
|
--boot uefi \
|
|
--network bridge=_servers \
|
|
--disk /mnt/kvm_guests/$GUEST \
|
|
--cloud-init user-data=./user-data/debian-node.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
|
|
fi
|
|
$0
|
|
}
|
|
|
|
pg_node(){
|
|
read -p "Enter the desired host: " KVM_HOST
|
|
read -p "Enter the name of guest: " GUEST
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool kvm_guests --name ${GUEST} --format qcow2 --capacity 500G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
echo "local-hostname: ${GUEST}" > ./meta-data
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 4 \
|
|
--memory 4096 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_servers \
|
|
--disk /mnt/kvm_guests/$GUEST \
|
|
--cloud-init user-data=./user-data/postgres.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
$0
|
|
}
|
|
|
|
zed_lake_node(){
|
|
read -p "Enter the desired host: " KVM_HOST
|
|
read -p "Enter the name of guest: " GUEST
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool kvm_guests --name ${GUEST} --format qcow2 --capacity 500G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
echo "local-hostname: ${GUEST}" > ./meta-data
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 4 \
|
|
--memory 4096 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_servers \
|
|
--disk /mnt/kvm_guests/$GUEST \
|
|
--cloud-init user-data=./user-data/zed-lake.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
$0
|
|
}
|
|
|
|
int_docker_node(){
|
|
read -p "Enter the desired host: " KVM_HOST
|
|
read -p "Enter the name of guest: " GUEST
|
|
read -p "1). Leader or 2). Worker: " NODE_TYPE
|
|
if [ $NODE_TYPE == 1 ]; then
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool nvme_guests --name ${GUEST} --format qcow2 --capacity 100G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
echo "local-hostname: ${GUEST}" > ./meta-data
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 4 \
|
|
--memory 4096 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_servers \
|
|
--disk /mnt/nvme_guests/$GUEST \
|
|
--cloud-init user-data=./user-data/docker-leader.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
elif [ $NODE_TYPE == 2 ]; then
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool nvme_guests --name ${GUEST} --format qcow2 --capacity 100G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
echo "local-hostname: ${GUEST}" > ./meta-data
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 8 \
|
|
--memory 8192 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_servers \
|
|
--disk /mnt/nvme_guests/$GUEST \
|
|
--cloud-init user-data=./user-data/docker-worker.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
else
|
|
echo "Invalid type..."; $0
|
|
fi
|
|
$0
|
|
}
|
|
|
|
host_docker_node(){
|
|
read -p "Enter the desired host: " KVM_HOST
|
|
read -p "Enter the name of guest: " GUEST
|
|
read -p "1). Leader or 2). Worker: " NODE_TYPE
|
|
if [ $NODE_TYPE == 1 ]; then
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool nvme_guests --name ${GUEST} --format qcow2 --capacity 100G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
echo "local-hostname: ${GUEST}" > ./meta-data
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 4 \
|
|
--memory 4096 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_hosting \
|
|
--disk /mnt/nvme_guests/$GUEST \
|
|
--cloud-init user-data=./user-data//docker-leader.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
elif [ $NODE_TYPE == 2 ]; then
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool nvme_guests --name ${GUEST} --format qcow2 --capacity 100G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
echo "local-hostname: ${GUEST}" > ./meta-data
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 8 \
|
|
--memory 8192 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_hosting \
|
|
--disk /mnt/nvme_guests/$GUEST \
|
|
--cloud-init user-data=./user-data/docker-worker.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
else
|
|
echo "Invalid type..."; $0
|
|
fi
|
|
$0
|
|
}
|
|
|
|
elastic_node(){
|
|
read -p "Enter the desired host: " KVM_HOST
|
|
read -p "Enter the name of guest: " GUEST
|
|
read -p "Elastic Node or Fleet Server (1=Node or 2=Fleet): " E_TYPE
|
|
echo "local-hostname: ${GUEST}" > ./meta-data
|
|
if [ $E_TYPE == 1 ]; then
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool kvm_guests --name ${GUEST} --format qcow2 --capacity ${VOL_SIZE}G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 4 \
|
|
--memory 8192 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_elastic \
|
|
--disk /mnt/kvm_guests/$GUEST \
|
|
--cloud-init user-data=./user-data//elastic-stack.yaml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
elif [ $E_TYPE == 2 ]; then
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool kvm_guests --name ${GUEST} --format qcow2 --capacity 100G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 2 \
|
|
--memory 2048 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_elastic \
|
|
--disk /mnt/kvm_guests/$GUEST \
|
|
--cloud-init user-data=./user-data//elastic-fleet.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
else
|
|
echo "Invalid option..."; $0
|
|
fi
|
|
$0
|
|
}
|
|
|
|
kube_node(){
|
|
read -p "Enter the desired host: " KVM_HOST
|
|
read -p "Enter the name of guest: " GUEST
|
|
read -p "Dev or Prod (1=Prod or 2=Dev): " KUBE_E
|
|
echo "local-hostname: ${GUEST}" > ./meta-data
|
|
if [ ${KUBE_E} == 1 ]; then
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool nvme_guests --name ${GUEST} --format qcow2 --capacity 100G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 2 \
|
|
--memory 4096 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_hosting \
|
|
--disk /mnt/nvme_guests/$GUEST \
|
|
--cloud-init user-data=./user-data//k3s-install.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
elif [ ${KUBE_E} == 2 ]; then
|
|
virsh -c qemu+ssh://root@${KVM_HOST}/system vol-create-as --pool nvme_guests --name ${GUEST} --format qcow2 --capacity 100G --backing-vol /mnt/iso/AlmaLinux-10-GenericCloud-latest.x86_64_v2.qcow2 --backing-vol-format qcow2
|
|
virt-install \
|
|
--connect qemu+ssh://root@${KVM_HOST}/system \
|
|
--name $GUEST \
|
|
--vcpus 4 \
|
|
--memory 4096 \
|
|
--os-variant almalinux9 \
|
|
--boot uefi \
|
|
--network bridge=_servers \
|
|
--disk /mnt/nvme_guests/$GUEST \
|
|
--cloud-init user-data=./user-data//k3s-install.yml,meta-data=./meta-data \
|
|
--import \
|
|
--autostart \
|
|
--noautoconsole
|
|
else
|
|
echo "Invalid option..."; $0
|
|
fi
|
|
$0
|
|
}
|
|
|
|
echo "Available options:
|
|
1). Create Basic Node
|
|
2). Create Internal Docker Node
|
|
3). Create Hosting Docker Node
|
|
4). Create Elastic Node
|
|
5). Create k3s node
|
|
6). Create kubeadm node
|
|
7). Postgresql node
|
|
8). Zed Lake node
|
|
a). Get info on a host
|
|
b). Domain migration
|
|
00). Exit
|
|
"
|
|
read -p "Select an option: " OPT
|
|
|
|
case "$OPT" in
|
|
|
|
1) test_node
|
|
;;
|
|
|
|
2) int_docker_node
|
|
;;
|
|
|
|
3) host_docker_node
|
|
;;
|
|
|
|
4) elastic_node
|
|
;;
|
|
|
|
5) kube_node
|
|
;;
|
|
|
|
6) kubeadm_node
|
|
;;
|
|
|
|
7) pg_node
|
|
;;
|
|
|
|
8) zed_lake_node
|
|
;;
|
|
|
|
a|A) get_host_info
|
|
;;
|
|
|
|
b|B) migrate_domain
|
|
;;
|
|
|
|
00|0) echo "Exiting..."; exit 0
|
|
;;
|
|
|
|
*) echo "Invalid option."; sleep 1; $0
|
|
;;
|
|
esac
|